定義在函數(shù)體外的都屬于全局變量,定義在函數(shù)體內(nèi)的屬于局部變量。這里的定義是指通過(guò)var聲明的。
JavaScript有隱含的全局概念,意味著你不聲明的任何變量都會(huì)成為一個(gè)全局對(duì)象屬性。例如:
兩個(gè)結(jié)果是一樣的,說(shuō)明myname是一個(gè)全局變量。
那么,隱式全局變量和明確定義的全局變量有沒(méi)有區(qū)別呢。。答案肯定是有的,看下面的例子:
由上面的例子可以看出:在函數(shù)之外通過(guò)var定義的global_test1不能被刪除,而沒(méi)有經(jīng)過(guò)var定義的global_test2和global_test3都被刪除了(無(wú)論是否是在函數(shù)體內(nèi)創(chuàng)建)。
總結(jié)來(lái)說(shuō),在函數(shù)體外通過(guò)var聲明的全局變量不能被刪除,而隱式全局變量是可以刪除的。
這里要注意了:JavaScript有一種行為叫做“hoisting”(懸置/置頂解析/預(yù)解析)。
我們通過(guò)一個(gè)例子來(lái)說(shuō)明:
你猜兩次alert的內(nèi)容一致嗎??顯然不一致,一致還用說(shuō)嗎。。實(shí)際輸出是:"undefined", "local_huming"。
上面的例子等同于
第一次alert輸出的myname并不是你以為的全局變量,而是和它在一個(gè)作用域(一個(gè)函數(shù)體)內(nèi)的局部變量。雖然它還沒(méi)有被聲明,但被當(dāng)作是聲明了。這就是所謂的“hoisting”。
這樣應(yīng)該就明白了吧。當(dāng)你在函數(shù)體中使用了一個(gè)變量,又在之后重新聲明的話,就可能產(chǎn)生錯(cuò)誤。
書(shū)寫(xiě)規(guī)范:
好處在于:
1、所有局部變量都定義在函數(shù)開(kāi)始,方便查找;
2、防止變量在定義之前使用的邏輯錯(cuò)誤。
小伙伴們是否了解了javascript的變量聲明了呢,以上內(nèi)容很詳細(xì)也很易懂,最后的總結(jié)也很中肯,小伙伴們不要錯(cuò)過(guò)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注