[JS]JavaScript中級教程(feat.コード鞍馬)-Closer(Close)
6911 ワード
1.語彙環境
JavaScriptには語彙環境があります.
let one;
one = 1;
function addOne(num) {
console.log(one + num);
}
addOne(5);
上のコードがどのように動作しているかを順番に見てみましょう.2.例
function makeAdder(x) {
return function(y) {
return x + y;
}
}
const add3 = makeAdder(3); // (1)
console.log(add3(2)); // (2)
上記のコードは、最初の実行時にグローバルLexicalEnvironmentに入ります.次のようになります.makeAdder: function
add 3:初期化X
その後(1)実行文が#の場合、makeAdderはLexical環境を実行して生成します.
このLexical環境には,伝達されたx人3が含まれる.
また、グローバルLexical環境では、文の実行に伴ってadd 3に関数が割り当てられます.
makeAdder: function
add3: function
ここで、(2)番目の文を実行すると、add 3という関数が実行され、別のLexical環境が生成されます.今回はyというパラメータが得られたので,2というyを格納した.
x+yを実行します.最初は最後に生成されたLexical環境で見つけられます.yがありますが、xがないので、参照の外部Lexicallに移動し、xを探して計算します.
3.結論
function makeAdder(x) {
return function(y) { // y를 가지고 있고 상위함수인 makeAdder의 x에 접근 가능하다
return x + y;
}
}
const add3 = makeAdder(3);
console.log(add3(2)); // 5
// add3 함수가 생성된 이후에도 상위함수인 makeAdder의 x에 접근이 가능하다.
const add10 = makeAdder(10);
console.log(add10(5)); // 15
console.log(add3(1)); // 4
Closureは、関数とディレクトリ環境の組み合わせを意味します.関数生成時の外部変数を記憶し、生成後もアクセスを継続することを指す.(このポスターの内容はyoutube coding anmaのビデオを参考にしています)
Youtube: https://www.youtube.com/watch?v=4_WLS9Lj6n4
Reference
この問題について([JS]JavaScript中級教程(feat.コード鞍馬)-Closer(Close)), 我々は、より多くの情報をここで見つけました https://velog.io/@iamkanguk/JS-자바스크립트-중급강좌-feat.-코딩앙마-클로저Closureテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol