クロージャ最も直接的な定義:いつ、どこでレキシカルスコープにアクセスすることを覚えることができる機能は、それが作成するクロージャをこの関数は、現在のレキシカルスコープの外で行われたとしても、。
次のコード:
function foo() {
var a = 1;
function bar() {
console.log(a);
}
bar();
}
foo(); // 1
すべての最初の、とカイルの定義は、第一印象は、これはルールの範囲はそれを見つけるためにと言っているわけではないということです提供しますか?初心者でも閉鎖を理解していないので、まだ我々はこの結果を理解することができますので、その理由は、非常に単純であるbar
関数がでネストされているfoo
機能。正確には、それがクロージャを考慮されていません。この規則は、クロージャのスコープの一部でしかありません検索。
本当の閉鎖は、次のコードと同じでなければなりません。
function foo() {
var a = 1;
function bar() {
console.log(a);
}
return bar;
}
let baz = foo();
baz(); // 1
// 嗨,这就是闭包的威力