なぜ 10 回出力されるのでしょうか? 押し込まれる 10 は 1 ~ 9 ではないでしょうか? この質問は専門家に質問してください
forループ実行時にiの値を保存するクロージャー関数を作成するだけで、順次出力できます
リーリー
過去に読んだ記事 クロージャを理解するには、コードを書いてそれを自分のコードで使用する必要があります。それ以外は丸暗記するしかありません。 昔ながらの中国人は、幼い頃から子供たちに物を持たせるのが好きですが、それが何を意味するのかを知らず、時にはそれを明確に説明できないこともあります。今後上記を持っている場合は、私が書いたログを読んで、それでも理解できない場合は、メッセージを残して質問してください。 .com/2084...
各 i は同じ外部 i、つまり 10 を参照します
var変数のスコープはブロックレベルのスコープではなく関数スコープです
スコープチェーンは作成時に生成されています c[i] = function(i){ return i; };実行すると現在のスコープにはiがなく、上位スコープのsave_i()のiが10になっています。結果は 0 ~ 9 になると思いますか? 上のスコープはグローバル スコープだと思いますか?
c[i] = function(i){ return i; };
a[i] は割り当てられたときの関数の束です。つまり、実行されず、i も取得されず、そのスコープも i を取得しません
以下で実行すると、この一連の関数は独自のスコープで取得できる i を探し始めます。これはループ実行後の 10 です
var キーワードは変数スコープを関数スコープとして宣言するため、for ループ内の i 変数がプロモートされます。 投稿者が for ループ内のセクションを自己実行関数に変更すれば問題ありません。例: 関数 save_i(){
}
forループ実行時にiの値を保存するクロージャー関数を作成するだけで、順次出力できます
リーリーリーリー
過去に読んだ記事
クロージャを理解するには、コードを書いてそれを自分のコードで使用する必要があります。それ以外は丸暗記するしかありません。
昔ながらの中国人は、幼い頃から子供たちに物を持たせるのが好きですが、それが何を意味するのかを知らず、時にはそれを明確に説明できないこともあります。今後
上記
を持っている場合は、私が書いたログを読んで、それでも理解できない場合は、メッセージを残して質問してください。 .com/2084...
リーリー
リーリー
各 i は同じ外部 i、つまり 10 を参照します
リーリー
var変数のスコープはブロックレベルのスコープではなく関数スコープです
スコープチェーンは作成時に生成されています
c[i] = function(i){ return i; };
実行すると現在のスコープにはiがなく、上位スコープのsave_i()のiが10になっています。結果は 0 ~ 9 になると思いますか? 上のスコープはグローバル スコープだと思いますか?a[i] は割り当てられたときの関数の束です。つまり、実行されず、i も取得されず、そのスコープも i を取得しません
以下で実行すると、この一連の関数は独自のスコープで取得できる i を探し始めます。これはループ実行後の 10 です
var キーワードは変数スコープを関数スコープとして宣言するため、for ループ内の i 変数がプロモートされます。 投稿者が for ループ内のセクションを自己実行関数に変更すれば問題ありません。例:
リーリー関数 save_i(){
}