検索

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

jsクロージャスコープ

なぜ 10 回出力されるのでしょうか? 押し込まれる 10 は 1 ~ 9 ではないでしょうか? この質問は専門家に質問してください

リーリー
扔个三星炸死你扔个三星炸死你2730日前771

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

  • 黄舟

    黄舟2017-06-28 09:30:39

    forループ実行時にiの値を保存するクロージャー関数を作成するだけで、順次出力できます

    リーリー

    返事
    0
  • 阿神

    阿神2017-06-28 09:30:39

    リーリー

    過去に読んだ記事
    クロージャを理解するには、コードを書いてそれを自分のコードで使用する必要があります。それ以外は丸暗記するしかありません。
    昔ながらの中国人は、幼い頃から子供たちに物を持たせるのが好きですが、それが何を意味するのかを知らず、時にはそれを明確に説明できないこともあります。今後
    上記
    を持っている場合は、私が書いたログを読んで、それでも理解できない場合は、メッセージを残して質問してください。 .com/2084...

    返事
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-28 09:30:39

    リーリー

    返事
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    リーリー

    各 i は同じ外部 i、つまり 10 を参照します

    返事
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    リーリー

    var変数のスコープはブロックレベルのスコープではなく関数スコープです

    返事
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:30:39

    スコープチェーンは作成時に生成されています c[i] = function(i){ return i; };実行すると現在のスコープにはiがなく、上位スコープのsave_i()のiが10になっています。結果は 0 ~ 9 になると思いますか? 上のスコープはグローバル スコープだと思いますか?

    返事
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    a[i] は割り当てられたときの関数の束です。つまり、実行されず、i も取得されず、そのスコープも i を取得しません

    以下で実行すると、この一連の関数は独自のスコープで取得できる i を探し始めます。これはループ実行後の 10 です

    返事
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:30:39

    var キーワードは変数スコープを関数スコープとして宣言するため、for ループ内の i 変数がプロモートされます。 投稿者が for ループ内のセクションを自己実行関数に変更すれば問題ありません。例:
    関数 save_i(){

    リーリー

    }

    返事
    0
  • キャンセル返事