物議を醸した「with」ステートメント: 善のために使用できますか?
「with」ステートメントに関するアラン・ストームの発言は好奇心を引き起こしました私たちの中で。その有用性はほとんど研究されていませんが、その潜在的な落とし穴は依然として不明です。私たちはその使用法を詳しく調査し、そのリスクを回避しながらいくつかの正当なアプリケーションを明らかにしました。
「with」ステートメントが輝く場所
「with」ステートメントの注目すべき使用法の 1 つは次のとおりです。ブロックスコープ内の変数を定義します。 JavaScript にはブロック スコープの変数がないため、ループやクロージャ内でスコープの問題が発生しやすくなります。
For ループと "with" ステートメント
次のコードを考えてみましょう。
for (var i = 0; i < 3; ++i) { setTimeout(function() { alert(num); }, 10); }
このコードはループカウンター「i」を表示することを目的としています。非同期的に。ただし、JavaScript は反復ごとに新しいスコープを導入せず、変数 "num" が 3 つのクロージャすべてで共有されるため、この処理は失敗します。
"with" によるブロック スコープのシミュレーション
ES6 が広く利用可能になるまでは、「with」ステートメントを使用してブロックをシミュレートできますスコープ:
for (var i = 0; i < 3; ++i) { with ({num: i}) { setTimeout(function() { alert(num); }, 10); } }
このコードは、反復ごとに「num」プロパティを持つ個別のオブジェクトを作成し、ブロックのスコープ内で変数を効果的に分離します。
その他の使用法"with"
ブロック スコープのシミュレートに加えて、"with" ステートメントも使用できます。 for:
オブジェクトのプロパティへの便利なアクセス:
with (object) { property = value; }
オブジェクトの反復処理プロパティ:
with (object) { for (property in this) { // Do something with the property } }
避けるべき落とし穴
「with」ステートメントは便利ですが、潜在的な落とし穴も伴います:
結論
「with」ステートメントは、ブロック スコープのシミュレーションやオブジェクト プロパティへの便利なアクセスなど、特定のシナリオで便利なツールです。ただし、コードで使用する前に、その潜在的な欠点を慎重に考慮する必要があります。
以上が「with」ステートメントは JavaScript における便利なツールですか、それとも問題の原因ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。