javascript作用域、作用域鏈(菜鳥必看)
javascript的作用域和作用域鏈?zhǔn)俏覍W(xué)習(xí)最痛苦的一部分,因?yàn)槲一撕枚鄷r(shí)間看了好多技術(shù)文檔都沒有理解.大體知道什么意思了,然后還說不出之所以然來.
通過我大量的測(cè)試和看技術(shù)文檔總結(jié)了以下理解,雖然不是很有技術(shù)范但是確實(shí)能理解了。
1、javascript只有全局和局部之分,那些后臺(tái)語言的各種修飾符都沒有。在函數(shù)中不使用var則為全局。如下:
<script type="text/javascript">
varname="c#";//全局
window.name="java";//全局
varlanguage=function()
{
alert(name);
name="javascript";//全局
var name="JS";//局部
alert(name);
}()
alert(name);
</script>
上面代碼中表示為全局的在都指向同一個(gè)變量,下面的定義會(huì)替換上面的。關(guān)于三個(gè)alert分別是underfind,js,javascript.這就是作用域起了作用了。
2、作用域鏈從0級(jí)開始依次往下排,所謂的依次往下排指的是子級(jí)的排列。在尋找變量的時(shí)候先從同級(jí)找再找父級(jí)。
在上面的例子中,
首先彈出的是language方法里的第一個(gè)alert,如果window全局是0,那么在例子中var name="js"這個(gè)就是1.第一個(gè)alert就在1中找,如果找不到在去0中找。這是它發(fā)現(xiàn)了同級(jí)有一個(gè)var name="js"但是它目前還沒有賦值,所以彈出underfind
第二個(gè)彈出是language方法里的第二個(gè)alert,同樣的他會(huì)在1里找也就是方法內(nèi)部。他找到了name而且賦值了js,所以彈出的是js
第三個(gè)彈出是最下面的alert,由于在方法內(nèi)部已經(jīng)給全局name重新賦值了,導(dǎo)致彈出的是javascript。
然后增加下一個(gè)鏈路我們?cè)趌anguage中頂一個(gè)方法,如下:
<scripttype="text/javascript">
varname="javascript";//全局
window.name="javascript";//全局
varlanguage=function()
{
alert(name);
name="javascript";//全局
varname="JS";//局部
alert(name);
var lovelanguage=function(){
alert(name);
}();
}()
alert(name);
</script>
此時(shí)lovelanguage里的alert彈出的是js因?yàn)樗麜?huì)找上一級(jí)也就是language里的name,所以。。。
以上就是小編為大家?guī)淼膉avascript作用域、作用域鏈(菜鳥必看)的全部內(nèi)容了,希望大家多多支持腳步之家。
相關(guān)文章
uni-app h5端在jenkins構(gòu)建報(bào)錯(cuò)解決
這篇文章主要為大家介紹了uni-app h5端在jenkins構(gòu)建報(bào)錯(cuò)解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
解決webpack dev-server不能匹配post請(qǐng)求的問題
這篇文章主要介紹了解決webpack不能匹配post請(qǐng)求的問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
javascript 面向?qū)ο蠹夹g(shù)基礎(chǔ)教程
看了很多介紹javascript面向?qū)ο蠹夹g(shù)的文章,很暈.為什么?不是因?yàn)閷懙貌缓?而是因?yàn)樘願(yuàn)W.2009-12-12
jscript之Read an Excel Spreadsheet
jscript之Read an Excel Spreadsheet...2007-06-06
Javascript中replace方法與正則表達(dá)式的結(jié)合使用教程
replace方法是javascript涉及到正則表達(dá)式中較為復(fù)雜的一個(gè)方法,嚴(yán)格上說應(yīng)該是string對(duì)象的方法,下面這篇文章主要給大家介紹了關(guān)于Javascript中replace方法與正則表達(dá)式的結(jié)合使用的相關(guān)資料,需要的朋友可以參考下2022-09-09
javascript實(shí)現(xiàn)圖片預(yù)加載和懶加載
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)圖片預(yù)加載和懶加載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03

