エンクロージャの問題
610 ワード
fun aのスキャナーは1つ、お問い合わせのスキャナーは5つです
a Scopeでiは0->5,ドアのScopeでiは0,1,2,3,4
この場合、a関数は、iがリング終了の5であるため、5を出力する.
従って、通常iは0,1,2,3,4を出力する.
a Scopeでiは0->5,ドアのScopeでiは0,1,2,3,4
function a() {
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
}
a();
//5
//5
//5
//5
//5
varには関数単位スキャンがあるので、i値はforではなく、親a関数で検索されます.この場合、a関数は、iがリング終了の5であるため、5を出力する.
function a() {
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
}
a();
//0
//1
//2
//3
//4
varをletに変更すると、letはブロックレベルのscopeを持つため、iの値はforで使用されます.従って、通常iは0,1,2,3,4を出力する.
Reference
この問題について(エンクロージャの問題), 我々は、より多くの情報をここで見つけました https://velog.io/@dldnjsgy5912/클로저-문제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol