検索

ホームページ  >  に質問  >  本文

javascript - ES6 標準の紹介で let コマンドで言及した for ループ印刷は 10 です。let を使わずに置き換えるにはどうすればよいですか?

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

リーリー

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

阿神阿神2696日前872

全員に返信(4)返信します

  • 扔个三星炸死你

    扔个三星炸死你2017-06-28 09:24:57

    リーリー

    閉鎖の問題

    返事
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:24:57

    カスタム属性を使用できます
    var a = [];
    for (var i = 0; i <10; i++) {

    リーリー

    }
    a[6]() // 6

    ;

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新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

    返事
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:24:57

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

    返事
    0
  • キャンセル返事