小編給大家分享一下JavaScript中作用域鏈與執(zhí)行環(huán)境是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端網(wǎng)站建設(shè)、網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)公司、網(wǎng)站定制、成都全網(wǎng)營(yíng)銷、小程序制作、微信公眾號(hào)開(kāi)發(fā)、成都網(wǎng)站營(yíng)銷服務(wù),提供專業(yè)營(yíng)銷思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開(kāi)發(fā)來(lái)完成項(xiàng)目落地,為活動(dòng)板房企業(yè)提供源源不斷的流量和訂單咨詢。
每一個(gè)函數(shù)存在一個(gè)[[Scope]]內(nèi)部屬性,包含了一個(gè)函數(shù)被創(chuàng)建得作用域中對(duì)象得集合,這個(gè)集合為函數(shù)得作用域鏈。例如下面的全局函數(shù):
fucntion add(num1, num2){ var sum = num1 + num2; return sum; }
當(dāng)函數(shù)add被創(chuàng)建時(shí),它的作用域鏈中便插入了一個(gè)對(duì)象變量,里面包含所有在全局范圍內(nèi)定義的變量。
函數(shù)add的作用域會(huì)在函數(shù)執(zhí)行時(shí)用到,函數(shù)每次執(zhí)行都會(huì)創(chuàng)建一個(gè)執(zhí)行環(huán)境的內(nèi)部對(duì)象,每個(gè)執(zhí)行環(huán)境都有自己的作用域鏈。函數(shù)運(yùn)行時(shí),一個(gè)被稱為活動(dòng)對(duì)象的新對(duì)象就為執(zhí)行環(huán)境創(chuàng)建好了,里面包含了函數(shù)的所有局部變量,命名參數(shù),參數(shù)集合以及this。假設(shè)執(zhí)行var total = add(5,10),其對(duì)應(yīng)的作用域鏈如下:
函數(shù)執(zhí)行過(guò)程中,變量的查找時(shí)從作用域頭部開(kāi)始查找,如果找到就是使用改變量的值。如果找不到就繼續(xù)從作用域下一個(gè)對(duì)象查找,直到找到改變量。如過(guò)匹配不到,則為undefined。當(dāng)頻繁使用全局變量時(shí),可以先使用一個(gè)局部變量保存起來(lái),之后直接訪問(wèn)局部變量可以減少查找次數(shù)提高效率。例如:
function initUI(){ var doc = document, bd = doc.body, links = doc.getElementsByTagName("a"); .... }
當(dāng)函數(shù)執(zhí)行完成,活動(dòng)對(duì)象也會(huì)隨之銷毀。但閉包時(shí),活動(dòng)對(duì)象并不會(huì)銷毀。這也是為什么閉包占用內(nèi)存大的原因。
以上是“JavaScript中作用域鏈與執(zhí)行環(huán)境是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!