ホームページ > 記事 > ウェブフロントエンド > 詳細な例では、var を使用して変数を宣言する場合の欠点を説明しています
この記事では、javascript に関する関連知識を提供します。主に、変数を宣言するための var の使用が不十分であることに関する関連問題を紹介します。変数を宣言するために var を使用すると、変数宣言が繰り返されるため、データがカバレッジされます。以下で見てみましょう。皆さんのお役に立てれば幸いです。
[関連する推奨事項: JavaScript ビデオ チュートリアル 、Web フロントエンド ]
var
を使用して変数を宣言します (重複した変数宣言が許可されます。データが上書きされます) クロージャの問題
グローバル スコープ内の変数先頭へ戻る
JavaScript の変数の var 宣言の欠陥
宣言されていません 使用することはできますが (var で宣言された変数はプリコンパイルされるか、変数のヒントになります)、これは論理的ではありません。
同じ変数を複数回宣言できますが、厳密に言えば、変数は一度宣言された後は変更のみ可能であり、後で宣言することはできません。それも論理的ではありません。
for ループ内のループ パラメーターは、ループの元のメイン コントロールを超えてループの外で使用できます (for ループは汚染されています)。論理的ではありません。
ブロックレベルのスコープはありません。
例を見てみましょう
//首先判断生成一个随机数当随机数小于0.5时声明a赋值为‘abc’ //然后输出a if (Math.random() < 0.5){ var a = 'abc'; console.log(a); } //如果不是那么输出a else { console.log(a) } console.log(a);
ここには非常に深刻な問題があります。見てみましょう読んでください:
まず乱数を決定して生成し、乱数が 0.5 未満の場合は a を宣言して a
を出力し、0.5 以上であれば、また、a
も出力されます。その後、この a は、変数プロモーションの問題によりグローバル スコープに a があるため、実際には存在しません。読み取ることはできますが、変数プロモーションによりグローバル スコープが汚染されています。 。
通常、これは問題ないと思われますが、このコード文字列を他の言語に置き換えて同様のコードを記述すると、必ずエラーが報告されます。大規模なアプリケーションはある程度困難になります。
クロージャの問題をもう一度見てみましょう:
//选中div var div = document.getElementByTd('div'); //我这里创建10个按钮并添加进代码里 for (var i = 1; 1 < 10; i ++){ var btn = document.createElement('button'); btn.innerHTML = '按钮' + i; div.appendChild(btn); //添加点击事件点击按钮时输出对应的i btn.onclick = function () { console.log(i); } } //但是当点击输出时所有的按钮都为11 //原因是当在for声明变量i时遇到了变量提升就导致了来来回回更改的就只有这一个i //而当我们点击时for早已循环完所以循环完成时i = 11;就输出也是11了 // //一般我们的解决办法是将点击事件上写一个立即执行函数执行完删除方可正常运行
グローバル変数はグローバル オブジェクトにマウントされます: グローバル オブジェクト メンバーの汚染問題
var abc = "123" console.log(abc); //可以正常输出对吧,这就导致了一个问题 //我可以将abc挂载到window上如果说我要写很多的代码那就会导致全局变量污染 //然后我给console赋值 var console = "abc"; console.log(console); //然后再输出console会报错 //因为我对window的console进行了覆盖所以会报错
これは、元の JS で遭遇するさまざまな問題と不便です
[関連する推奨事項: JavaScript ビデオ チュートリアル 、Web フロントエンド ]
以上が詳細な例では、var を使用して変数を宣言する場合の欠点を説明していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。