首頁 >web前端 >js教程 >關於Javascript作用域鏈的八點總結_javascript技巧

關於Javascript作用域鏈的八點總結_javascript技巧

WBOY
WBOY原創
2016-05-16 17:10:241566瀏覽

1. JavaScript函數的作用域鏈分為定義時作用域鍊與運行時作用域鏈;

2.函數被定義的時候,它有一個屬性[[scope]]標明它的定義作用域鏈,定義時作用域鏈[[scope]]遵守這樣的規則:一個函數的定義時作用域鏈[[scope]]總是它所在的外部函數的執行時作用域鏈;

3.全域函數的定義作用域鏈只包含window的屬性;

4.一個函數的執行時作用域鏈總是在定義時作用域鏈的頭壓入目前活動物件(它包含this,arguments,參數,局部變數);

5.函數執行時,變數尋址總是從作用域鏈的頂端朝下尋找;所以全域變數的定址速度最慢;

6.內部函數被執行的時候,他仍然能夠存取它完整的作用域鏈。這就是閉包能夠在運行時能夠存取已經結束的外部函數定義的變數的原因;

7.函數執行遇到with語句時,會暫時在作用域鏈頂部壓入with指定的物件的所有屬性作為作用域鏈最頂端;

8.函數執行遇到catch的時候,會暫時在作用域鏈頂部壓入catch指定的錯誤物件作為作用域鏈的最頂端;

下面給一個例子並繪製出作用域鏈,以加深理解:

有這麼一段程式碼:

複製程式碼 程式碼如下:

function assigns( {
    var id = "xdi9592";
    document.getElementById("save-btn").onclick = function(event){
 ); 🎜>

將此函數產生的匿名閉包稱為Closure,則繪製出下圖為assignEvent執行時作用域鍊和Closure的定義時作用域鏈:


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn