#### 先理解 js 中的執行環境(
閉包按中文的意思就是關上乙個包的意思。如果我們把函式的變數物件當做是乙個包的話,那這個詞很形象體現了它的作用 。函式被呼叫時會建立它的執行環境,函式語句執行完後程式會自動銷毀這個函式的執行環境,但是當乙個函式中宣告了另乙個函式(子函式),並且如果存在對這個子函式引用,就會形成閉包,形象點說就相當於把父函式的活動物件(其實就是變數物件,只是它是執行時的變數物件)給關閉了起來,不讓程式去銷毀它(用技術語言就是父函式的活動物件會儲存在記憶體中,知道手動的解除這個引用)。例如:
function a()
// 此處產生閉包
b();
} a();
當函式可以記住並訪問它所在的作用域鏈時,就產生了閉包當然,大部分的閉包都不是這麼直觀的,因為子函式的呼叫是可以在父函式之外的,例如:
function a()
return b;
} var c=a();
// 此處產生閉包 此處的c函式其實就是a函式
c();
通過以上**,我們也可以看出乙個閉包的好處,就是我們再全域性作用域(此處是widow)下訪問到了區域性作用域(a函式)的作用域的值,按正常的詞法作用域是無法這麼做的,但是當我們使用閉包是就可以了。然後我們再看一點我們平時寫的比較多的:
function foo()
bar( baz );
}function bar(fn)
又或者
var fn;
function foo()
// 將baz分配給全域性變數
fn = baz;
}function bar()
foo();
// 2
bar();
以上也是閉包,因此在函式內部呼叫子函式,或者通過何種手段將內部函式傳遞到所在的詞法作用域以外,它都會持有對原始定義作用域的引用,無論在何處執行這個函式都會使用閉包大家理解了木有哇~ js中的閉包
閉包 英文 closure 1.閉包是乙個函式與作用域環境 即詞法環境 形成的閉包 2.閉包的理解 廣義的閉包 1.函式 2.這個函式能訪問到函式外部的狀態 也稱函式外部的變數 並不是我們平時理解的閉包 函式巢狀函式,並且內部函式通過return返回到外部,外部可以訪問內部函式的變數 總結 閉包 函...
js 中的閉包
閉包 閉包是指有權訪問另乙個函式作用域中的變數的函式,建立閉包的常見方式是 在乙個函式內部建立另乙個函式 從定義上講 js 中所有的函式都是閉包 function a returnb var c a c 以上 的特點 1 函式b巢狀在函式a內部 2 函式a返回函式b。當函式a的內部函式b被函式a外的...
JS中的閉包(Closure)
閉包是指有權訪問另乙個函式作用域中的變數的函式。最常見的就是在乙個函式內部建立另外乙個函式。以trialfunction 函式為例 function trialfunction property else if a1 b1 else 上述 中,內部函式訪問了外部函式中的變數property。即使這個...