最近、私は Ruan Yifeng 先生の ES 標準入門を読んでいたのですが、その最初の章を読んだときに、あるコードについて言及しました
リーリーここで let を使用するとこの問題は解決できますが、ES5 メソッドを使用するとどうなるでしょうか? IIFE でも実行できますが、すぐに印刷されます。
曾经蜡笔没有小新2017-06-28 09:24:57
これは何も関係ありませんが、質問者は6を出力したいと思いますよね? let
これは実際には閉包問題です。まず、なぜ 10 が出力されるのかを分析しましょう。 リーリー の値は10なので、10が出力されます。
for
里面的i
的作用于是整个外部区域,所以,当调用a[6]()
的时候,其实运行的是console.log(i)
,而此时因为跑完循环,i
質問者が言ったことについては、for
では、
for
内でのみ使用されるため、ループにより実行されないため、解決できます。これにより、グローバル スコープでは i
が 10 になります。 let
可以解决,是因为,for
里面,let
声明的变量,作用于只在for
内部,所以,不会因为循环跑完而使得i
リーリー
クロージャの役割は、前のの役割と似ており、外部変数の値を汚染することなくローカル変数を相互に分離することです。各クロージャは独立した領域であり、クロージャパラメータはクロージャ内でのみ使用されます。 6を出力した結果も得られます。 let