在Javascript中 聲明時(shí)用"var"與不用"var"的區(qū)別
Javascript聲明變量的時(shí)候,雖然用var關(guān)鍵字聲明和不用關(guān)鍵字聲明,很多時(shí)候運(yùn)行并沒(méi)有問(wèn)題,但是這兩種方式還是有區(qū)別的。可以正常運(yùn)行的代碼并不代表是合適的代碼。
var num = 1;
是在當(dāng)前域中聲明變量. 如果在方法中聲明,則為局部變量(local variable);如果是在全局域中聲明,則為全局變量。
而 num = 1;
事實(shí)上是對(duì)屬性賦值操作。首先,它會(huì)嘗試在當(dāng)前作用域鏈(如在方法中聲明,則當(dāng)前作用域鏈代表全局作用域和方法局部作用域etc。。。)中解析 num; 如果在任何當(dāng)前作用域鏈中找到num,則會(huì)執(zhí)行對(duì)num屬性賦值; 如果沒(méi)有找到num,它才會(huì)在全局對(duì)象(即當(dāng)前作用域鏈的最頂層對(duì)象,如window對(duì)象)中創(chuàng)造num屬性并賦值。
注意!它并不是聲明了一個(gè)全局變量,而是創(chuàng)建了一個(gè)全局對(duì)象的屬性。
即便如此,可能你還是很難明白“變量聲明”跟“創(chuàng)建對(duì)象屬性”在這里的區(qū)別。事實(shí)上,Javascript的變量聲明、創(chuàng)建屬性以及每個(gè)Javascript中的每個(gè)屬性都有一定的標(biāo)志說(shuō)明它們的屬性----如只讀(ReadOnly)不可枚舉(DontEnum)不可刪除(DontDelete)等等。
由于變量聲明自帶不可刪除屬性,比較var num = 1 跟 num = 1,前者是變量聲明,帶不可刪除屬性,因此無(wú)法被刪除;后者為全局變量的一個(gè)屬性,因此可以從全局變量中刪除。
具體見(jiàn)以下代碼:
// num1為全局變量,num2為window的一個(gè)屬性
var num1 = 1;
num2 = 2;
// delete num1; 無(wú)法刪除
// delete num2; 刪除
function model(){
var num1 = 1; // 本地變量
num2 = 2; // window的屬性
// 匿名函數(shù)
(function(){
var num = 1; // 本地變量
num1 = 2; // 繼承作用域(閉包)
num3 = 3; // window的屬性
}())
}
PS. 在ECMAScript5標(biāo)準(zhǔn)中,有一種“嚴(yán)格模式”(Strict Mode)。在嚴(yán)格模式中,為未聲明的標(biāo)識(shí)符賦值將會(huì)拋引用錯(cuò)誤,因此可以防止意外的全局變量屬性的創(chuàng)造。目前一些瀏覽器的新版本已經(jīng)支持。
- javascript定義變量時(shí)加var與不加var的區(qū)別
- JavaScript中var關(guān)鍵字的使用詳解
- js for循環(huán),為什么一定要加var定義i變量
- JavaScript中const、var和let區(qū)別淺析
- 淺析JavaScript中var that=this
- JScript中的''var''定義變量的作用域
- Javascript var變量隱式聲明方法
- 關(guān)于JavaScript中var聲明變量作用域的推斷
- javascript定義變量時(shí)有var和沒(méi)有var的區(qū)別探討
- JavaScript ES6中const、let與var的對(duì)比詳解
- JavaScript中var的重要性實(shí)例分析
相關(guān)文章
JavaScript 中的無(wú)窮數(shù)(Infinity)詳解
這篇文章主要介紹了JavaScript 中的無(wú)窮數(shù)(Infinity)的相關(guān)資料,非常的細(xì)致全面,有需要的小伙伴可以參考下2020-02-02JS創(chuàng)建事件的三種方法(實(shí)例代碼)
下面小編就為大家?guī)?lái)一篇JS創(chuàng)建事件的三種方法(實(shí)例代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05瀏覽器中url存儲(chǔ)的JavaScript實(shí)現(xiàn)
這篇文章主要介紹了瀏覽器中url存儲(chǔ)的JavaScript實(shí)現(xiàn),并且簡(jiǎn)單講述了輸入url地址后提示過(guò)去輸入歷史記錄的原理,需要的朋友可以參考下2015-07-07詳解JS-- 浮點(diǎn)數(shù)運(yùn)算處理
本篇文章主要介紹了JS--浮點(diǎn)數(shù)運(yùn)算處理,現(xiàn)在分享給大家,也給大家做個(gè)參考。感興趣的小伙伴們可以參考一下。2016-11-11原生javascript 學(xué)習(xí)之js變量全面了解
下面小編就為大家?guī)?lái)一篇原生javascript 學(xué)習(xí)之js變量全面了解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07講解JavaScript中for...in語(yǔ)句的使用方法
這篇文章主要介紹了講解JavaScript中for...in語(yǔ)句的使用方法,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06