javascript - ES6 標準の紹介で let コマンドで言及した for ループ印刷は 10 です。let を使わずに置き換えるにはどうすればよいですか?
阿神
阿神 2017-06-28 09:22:57
0
4
877

最近、私は Ruan Yifeng 先生の ES 標準入門を読んでいたのですが、その最初の章を読んだときに、あるコードについて言及しました

リーリー

ここで let を使用するとこの問題は解決できますが、ES5 メソッドを使用するとどうなるでしょうか? IIFE でも実行できますが、すぐに印刷されます。

阿神
阿神

闭关修行中......

全員に返信(4)
扔个三星炸死你

リーリー

閉鎖の問題

いいねを押す +0
巴扎黑

カスタム属性を使用できます
var a = [];
for (var i = 0; i リーリー

}
a[6]() // 6

;
いいねを押す +0
曾经蜡笔没有小新

これは何も関係ありませんが、質問者は6を出力したいと思いますよね? let

しかし、あなたが尋ねた質問はあなたが望んでいることと完全に矛盾しているようです、質問の説明を変更するのを手伝ってほしいのですが、私は少し無力です...

これは実際には閉包問題です。まず、なぜ 10 が出力されるのかを分析しましょう。 リーリー

の値は10なので、10が出力されます。

for里面的i的作用于是整个外部区域,所以,当调用a[6]()的时候,其实运行的是console.log(i),而此时因为跑完循环,i質問者が言ったことについては、forでは、

で宣言された変数はfor内でのみ使用されるため、ループにより実行されないため、

解決できます。これにより、グローバル スコープでは i が 10 になります。 let可以解决,是因为,for里面,let声明的变量,作用于只在for内部,所以,不会因为循环跑完而使得i

実際、この質問で本当に検討するのはクロージャです。

リーリー

クロージャの役割は、前の

の役割と似ており、外部変数の値を汚染することなくローカル変数を相互に分離することです。各クロージャは独立した領域であり、クロージャパラメータはクロージャ内でのみ使用されます。 6を出力した結果も得られます。 let

いいねを押す +0
Peter_Zhu

クロージャーを使用できます
http://www.softwhy.com/articl...
この記事の後半ではすでに質問について説明されています

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート