小編給大家分享一下JavaScript中作用域鏈與執行環境是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
每一個函數存在一個[[Scope]]內部屬性,包含了一個函數被創建得作用域中對象得集合,這個集合為函數得作用域鏈。例如下面的全局函數:
fucntion add(num1, num2){ var sum = num1 + num2; return sum; }
當函數add被創建時,它的作用域鏈中便插入了一個對象變量,里面包含所有在全局范圍內定義的變量。
函數add的作用域會在函數執行時用到,函數每次執行都會創建一個執行環境的內部對象,每個執行環境都有自己的作用域鏈。函數運行時,一個被稱為活動對象的新對象就為執行環境創建好了,里面包含了函數的所有局部變量,命名參數,參數集合以及this。假設執行var total = add(5,10),其對應的作用域鏈如下:
函數執行過程中,變量的查找時從作用域頭部開始查找,如果找到就是使用改變量的值。如果找不到就繼續從作用域下一個對象查找,直到找到改變量。如過匹配不到,則為undefined。當頻繁使用全局變量時,可以先使用一個局部變量保存起來,之后直接訪問局部變量可以減少查找次數提高效率。例如:
function initUI(){ var doc = document, bd = doc.body, links = doc.getElementsByTagName("a"); .... }
當函數執行完成,活動對象也會隨之銷毀。但閉包時,活動對象并不會銷毀。這也是為什么閉包占用內存大的原因。
以上是“JavaScript中作用域鏈與執行環境是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。