序文var は ES5 における変数宣言方法です。var で変数を宣言するとループ変数がグローバル変数に漏れる問題があると以前から聞いていましたが、この「グローバル」の影響がいつもわかりません。また、出力結果が増加/減少する値になる場合と、出力が同じ値になる場合が明確ではありません。 問題の再現(var i = 1; i <= 5; i++) の場合 { setTimeout(関数タイマー() { コンソールログ(i) }, i * 1000) } 予想される結果: 12345 印刷結果: 66666 解決閉鎖 (var i = 1; i <= 5; i++) の場合 { (関数(j) { setTimeout(関数タイマー() { コンソールログ(j) }, j * 1000) })(私) } setTimeout 3番目のパラメータ (var i = 1; i <= 5; i++) の場合 { タイムアウトを設定する( 関数タイマー(j) { コンソールログ(j) }, 私 * 1000、 私 ) } letを使ってiを定義する (i = 1; i <= 5; i++ とします) { setTimeout(関数タイマー() { コンソールログ(i) }, i * 1000) } させてlet に関しては、現在の i はこのループ内でのみ有効であり、各ループ内の i は実際には新しい変数であることを覚えておいてください。 JavaScript エンジンは、前のループの値を内部的に記憶し、このループの変数 i を初期化するときに、前のループに基づいて計算を実行します。 さらに、 for ループにはもう一つ特別な機能があり、ループ変数を設定する部分が親スコープで、ループ本体が別の子スコープになります。 (i = 0; i < 3; i++ とします) { i = 'abc' とします。 コンソールにログ出力します。 } //abc //abc //abc 要約するvar for ループを使用する際に発生する問題を解決する方法についての記事はこれで終わりです。var for ループの問題の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Nginx のリロード プロセスの背後にある真実を探る
>>: MySQL で特定の日、月、または年のデータをクエリするためのコードの詳細な説明
今日は、Taobao、JD.comなどのショッピングモールでよく使われている、小さな画像の上にマウス...
目次序文以前のバージョンイテレータパターンイテレータファクトリ関数イテレータプロトコル最後に序文多く...
この記事は主にInnoDBのロックに関する知識を素早く理解してもらうことを目的としています。 Roc...
mysqldump ツールのバックアップデータベース全体をバックアップする $> mysqld...
目次ネットワーク情報ホスト名を変更するDNSドメイン名解決ネットワーク関連コマンドファイアウォール暗...
まず、完成した効果をお見せしましょう 主なアイデア: 実際、このブラインドは一種の手品を使用していま...
スタートアップ企業は、型破りな仕事のやり方、ユニークなビジネスモデル、特徴的な製品やサービス、パーソ...
目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...
「通常 1em=16px」と言うのはなぜですか?ユーザーのブラウザによってレンダリングされるデフォル...
1. なぜこの記事を書くのですか?重複リクエストの処理に関する記事をたくさん読んだことがあるでしょう...
まず、全体的な考え方についてお話しします。 1. パスワードを使用してCentOSシステムにログイン...
1. データベースの文字セットを確認するデータベースの文字セットは、Linux で設定された環境変数...
Linux コンピュータには 2 つの時間があります。1 つはハードウェア時間 (BIOS に記録さ...
1. 遅いクエリログ1.1 MySQL ログの種類ログは、データベースの操作や、ユーザーがデータベー...
目次1. 短絡判定2. オプション連鎖演算子 (?) 3. ヌル合体演算子 (??) 4. 終了関数...