最近、私は Ruan Yifeng 先生の ES 標準入門を読んでいたのですが、その最初の章を読んだときに、あるコードについて言及しました
ここで let を使用するとこの問題は解決できますが、ES5 メソッドを使用するとどうなるでしょうか? IIFE でも実行できますが、すぐに印刷されます。
闭关修行中......
リーリー
閉鎖の問題
カスタム属性を使用できますvar a = [];for (var i = 0; i リーリー
}a[6]() // 6
これは何も関係ありませんが、質問者は6を出力したいと思いますよね? let
let
for里面的i的作用于是整个外部区域,所以,当调用a[6]()的时候,其实运行的是console.log(i),而此时因为跑完循环,i質問者が言ったことについては、forでは、
for
i
a[6]()
console.log(i)
解決できます。これにより、グローバル スコープでは i が 10 になります。 let可以解决,是因为,for里面,let声明的变量,作用于只在for内部,所以,不会因为循环跑完而使得i
の役割と似ており、外部変数の値を汚染することなくローカル変数を相互に分離することです。各クロージャは独立した領域であり、クロージャパラメータはクロージャ内でのみ使用されます。 6を出力した結果も得られます。 let
クロージャーを使用できますhttp://www.softwhy.com/articl...この記事の後半ではすでに質問について説明されています
リーリー
閉鎖の問題
カスタム属性を使用できます
var a = [];
for (var i = 0; i リーリー
}
;a[6]() // 6
これは何も関係ありませんが、質問者は6を出力したいと思いますよね?
しかし、あなたが尋ねた質問はあなたが望んでいることと完全に矛盾しているようです、質問の説明を変更するのを手伝ってほしいのですが、私は少し無力です...let
for
里面的i
的作用于是整个外部区域,所以,当调用a[6]()
的时候,其实运行的是console.log(i)
,而此时因为跑完循环,i
質問者が言ったことについては、for
では、for
内でのみ使用されるため、ループにより実行されないため、解決できます。これにより、グローバル スコープでは
実際、この質問で本当に検討するのはクロージャです。i
が 10 になります。let
可以解决,是因为,for
里面,let
声明的变量,作用于只在for
内部,所以,不会因为循环跑完而使得i
リーリー
クロージャの役割は、前のの役割と似ており、外部変数の値を汚染することなくローカル変数を相互に分離することです。各クロージャは独立した領域であり、クロージャパラメータはクロージャ内でのみ使用されます。 6を出力した結果も得られます。
let
クロージャーを使用できます
http://www.softwhy.com/articl...
この記事の後半ではすでに質問について説明されています