var let const相關(guān)

1.在ES5中,頂層對(duì)象的屬性和全局變量是等價(jià)的,var 命令和 function 命令聲明的全局變量,自然也是頂層對(duì)象

var a = 12;
function f(){};

console.log(window.a) // 12
console.log(window.f) // f(){}
console.log(this.a) // 12
console.log(this.f)  // f(){}

2.但ES6規(guī)定,var 命令和 function 命令聲明的全局變量,依舊是頂層對(duì)象的屬性,但 let命令、const命令、class命令聲明的全局變量,不屬于頂層對(duì)象的屬性

let a = 12;
let zs = function f(){};

console.log(window.a) //undefined
console.log(window.zs)//undefined
console.log(this.a)//undefined
console.log(this.zs)//undefined

3.var 存在變量提升,允許在沒有聲明變量之前使用變量,即將變量聲明悄悄提升到使用變量之前

console.log(zs) // undefined
var zs = 'zs'
console.log(zs)  // 'zs'

變量提升只局限于當(dāng)前的函數(shù),不會(huì)提升到函數(shù)外面

console.log(a)

var fn = function () {
    console.log(a);
    var a=2;
    console.log(a)
};
fn() // 會(huì)直接報(bào)錯(cuò)

var可以重復(fù)聲明一個(gè)變量只在自己的作用域和子作用域生效,可以理解為一旦在函數(shù)中使用var聲明變量a,就在函數(shù)的頂部先聲明了a=undefined,然后再運(yùn)行到var的時(shí)候給a賦值;

重復(fù)聲明變量

var zs = 2
var zs = 4
zs  // 4

函數(shù)塊中聲明的var變量不會(huì)影響函數(shù)之外的相同名字的的變量

console.log(a)
var a = 1;
console.log(a)
 
var fn = function () {
    console.log(a);
    a=3;
    console.log(a)
    var a=2;
    console.log(a)
 
 
};
fn()
console.log(a)
 
// undefined
// 1
// undefined
// 3
// 2
// 1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容