JavaScript作為屬性的變量
當(dāng)聲明一個(gè)JavaScript全局變量時(shí),實(shí)際上是定義了全局對(duì)象的一個(gè)屬性。當(dāng)使用var聲明一個(gè)變量時(shí),創(chuàng)建的這個(gè)屬性是不可配置的,也就是說(shuō)這個(gè)變量無(wú)法通過(guò)delete運(yùn)算符刪除?赡苣阋呀(jīng)注意到了,如果你沒(méi)有使用嚴(yán)格模式并給一個(gè)未聲明的變量賦值的話,JavaScript會(huì)自動(dòng)創(chuàng)建一個(gè)全局變量。以這種方式創(chuàng)建的變量是全局對(duì)象的正常的可配值屬性,并可以刪除它們:
var truevar=1; //聲明一個(gè)不可刪除的全局變量
fakevar=2; //創(chuàng)建全局對(duì)象的一個(gè)可刪除的屬性
this.fakevar2=3; //同上
delete truevar //=>false:變量并沒(méi)有被刪除
delete fakevar //=>true:變量被刪除
delete this.fakevar2 11=>true:變量被刪除
JavaScript壘局變量是全局對(duì)象的屬性,這是在ECMAScript規(guī)范中強(qiáng)制規(guī)定的。對(duì)于局部變量則沒(méi)有如此規(guī)定,但我們可以想象得到,局部變量當(dāng)做跟函數(shù)調(diào)用相關(guān)的某個(gè)對(duì)象的屬性。ECMAScript 3規(guī)范稱該對(duì)象為“調(diào)用對(duì)象”(call object),ECMAScript 5規(guī)范稱為“聲明上下文對(duì)象” (declarative environment record)。JavaScript可以允許使用this關(guān)鍵字來(lái)引用全局對(duì)象,卻沒(méi)有方法可以引用局部變量中存放的對(duì)象。這種存放局部變量的對(duì)象的特有性質(zhì),是一種對(duì)我們不可見(jiàn)的內(nèi)部實(shí)現(xiàn)。然而,這些局部變量對(duì)象存在的觀念是非常重要的,我們會(huì)在接下來(lái)的文章中展開(kāi)分享。