欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談javascript中執(zhí)行環(huán)境(作用域)與作用域鏈

 更新時(shí)間:2016年12月08日 15:01:59   作者:918之初  
本文主要介紹了javascript中執(zhí)行環(huán)境(作用域)與作用域鏈,并在文章結(jié)尾處做出了總結(jié),感興趣的朋友可以看下

相信很多初學(xué)者對(duì)與javascript中的執(zhí)行環(huán)境與作用域鏈不能很好的理解,這里,我會(huì)按照自己的理解同大家一起分享。

一般情況下,我們把執(zhí)行環(huán)境分為全局執(zhí)行環(huán)境和局部執(zhí)行環(huán)境,其中局部執(zhí)行環(huán)境我們又可以稱之為函數(shù)執(zhí)行環(huán)境。那么究竟什么使執(zhí)行環(huán)境呢?通俗的說(shuō),執(zhí)行環(huán)境即為代碼執(zhí)行時(shí)所處的環(huán)境。我們下來(lái)看一看如下代碼,再進(jìn)一步分析之。

<script><br>var name="zhuzhenwei";
function changeName(){
    if (name=="zhuzhenwei"){
          name="heting";
    }else{
          name="zhuzhenwei";
    }
}
changeName();
console.log(name); //heting<br></script>

如上述代碼,當(dāng)執(zhí)行第一個(gè)語(yǔ)句時(shí),該語(yǔ)句所在的環(huán)境為全局執(zhí)行環(huán)境,應(yīng)當(dāng)注意的是:每個(gè)執(zhí)行環(huán)境都有一個(gè)與之相關(guān)聯(lián)的變量對(duì)象,對(duì)于全局執(zhí)行環(huán)境,與它向關(guān)聯(lián)的對(duì)象為window對(duì)象。緊接著,下面這條語(yǔ)句聲明了一個(gè)函數(shù)(注意:這里僅僅是聲明了函數(shù),沒(méi)有被調(diào)用之前是不會(huì)執(zhí)行內(nèi)部代碼的)。  同樣這個(gè)函數(shù)也是處于全局執(zhí)行環(huán)境的。最后,我們調(diào)用了changeName()函數(shù),一旦調(diào)用了該函數(shù),那么立即跳轉(zhuǎn)到了changeName()函數(shù)的執(zhí)行環(huán)境(即函數(shù)執(zhí)行環(huán)境),一旦進(jìn)入執(zhí)行環(huán)境,便開(kāi)始創(chuàng)建函數(shù)內(nèi)部相應(yīng)的變量(如函數(shù)中假設(shè)出現(xiàn)var a=12;這樣的代碼),不調(diào)用函數(shù)是不會(huì)創(chuàng)建的,且與之相關(guān)的變量對(duì)象我們認(rèn)為是活動(dòng)對(duì)象(活動(dòng)對(duì)象開(kāi)始只包含一個(gè)變量,即arguments對(duì)象),自此開(kāi)始從上到下執(zhí)行語(yǔ)句。與此同時(shí),代碼在函數(shù)環(huán)境中執(zhí)行時(shí),就會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈,這個(gè)作用域鏈包含changeName()的變量對(duì)象和全局變量對(duì)象。

作用域鏈實(shí)際上就是我們可以通過(guò)它從前端到末端可以訪問(wèn)的范圍,即保證對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的所有變量和函數(shù)的有序訪問(wèn),其中前端是指當(dāng)前執(zhí)行代碼所在的變量對(duì)象,這里現(xiàn)在就是changeName()函數(shù)的變量對(duì)象,末端是全局變量對(duì)象,比如說(shuō):我們?cè)趫?zhí)行函數(shù)時(shí),需要尋找一個(gè)標(biāo)識(shí)符,這是就是通過(guò)作用域鏈的末端進(jìn)行尋找,若作用域鏈的末端找不到,就一直向上尋找,直到window對(duì)象。雖然在全局環(huán)境中我沒(méi)有提到作用域鏈,但實(shí)際上全局環(huán)境中作用域鏈也是存在的,只是只有一個(gè)全局變量對(duì)象。 很明顯:訪問(wèn)局部變量比訪問(wèn)全局變量更快,因?yàn)椴挥孟蛏纤阉髯饔糜蜴?/strong>。顯然,作用域鏈?zhǔn)请S著代碼所處的執(zhí)行環(huán)境的不同而動(dòng)態(tài)變化的。           

當(dāng)執(zhí)行完changeName()函數(shù)之后,即函數(shù)執(zhí)行環(huán)境中的代碼執(zhí)行完成之后,該環(huán)境中的局部變量和局部對(duì)象會(huì)被立即銷毀(如果變量沒(méi)有用var聲明,表明是全局變量,不會(huì)在局部環(huán)境的代碼執(zhí)行之后銷毀),隨即執(zhí)行環(huán)境由函數(shù)執(zhí)行環(huán)境轉(zhuǎn)向全局執(zhí)行環(huán)境,繼續(xù)執(zhí)行console.log(name);語(yǔ)句。只是,如果我們關(guān)閉網(wǎng)頁(yè)或?yàn)g覽器,全局環(huán)境也將被銷毀。

總結(jié)如下:

  • 執(zhí)行環(huán)境也成為作用域,執(zhí)行環(huán)境決定了變量的生命周期。
  • 執(zhí)行環(huán)境有全局執(zhí)行環(huán)境和局部執(zhí)行環(huán)境之分,每進(jìn)入一個(gè)執(zhí)行環(huán)境就會(huì)創(chuàng)建一個(gè)用于搜索變量和函數(shù)的作用域鏈,于是我們認(rèn)為這個(gè)作用域鏈?zhǔn)莿?dòng)態(tài)變化的。
  • 函數(shù)的局部環(huán)境不僅有權(quán)訪問(wèn)函數(shù)作用域中的變量,而且有權(quán)訪問(wèn)其包含環(huán)境(父環(huán)境),乃至全局環(huán)境;而全局環(huán)境只能訪問(wèn)在全局環(huán)境中定義的變量和函數(shù)(局部環(huán)境中未使用var聲明的變量也屬于全局變量),不能訪問(wèn)局部環(huán)境中的數(shù)據(jù)(沒(méi)有說(shuō)所有數(shù)據(jù),正是因?yàn)槿肿兞靠梢栽L問(wèn))。注意:函數(shù)中的參數(shù)時(shí)函數(shù)的局部變量。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

最新評(píng)論