jsクロージャスコープ
扔个三星炸死你
扔个三星炸死你 2017-06-28 09:28:39
0
8
778

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

リーリー
扔个三星炸死你
扔个三星炸死你

全員に返信(8)
黄舟

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

リーリー
いいねを押す +0
阿神

リーリー

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

いいねを押す +0
女神的闺蜜爱上我

リーリー

いいねを押す +0
黄舟

リーリー

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

いいねを押す +0
黄舟

リーリー

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

いいねを押す +0
Peter_Zhu

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

いいねを押す +0
黄舟

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

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

いいねを押す +0
巴扎黑

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

リーリー

}

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