デフォルト言語 (ES5 Default) とは異なり、JavaScript の厳密モード (ES5 Strict) は、言語を完全に静的スコープにする制限を提供します。次の違反のため、既定の言語は完全に静的にスコープされていません。
- 宣言されていない変数への割り当ては、暗黙のグローバル変数を動的に作成します。
- ステートメント (JavaScript ではオブジェクトは動的である
with
ため、JS エンジンは、どの名前がオブジェクトのプロパティで、どの名前が環境にバインドされているかを評価前に知ることができません)、 eval
呼び出しは動的に名前を環境に追加できます。- オペレーターは、
delete
環境から名前を動的に削除できます (暗黙のグローバル変数、および eval 呼び出しによって追加された変数に対して機能します)。
ソース: http://www.youtube.com/watch?v=Kq4FpMe6cRs&t=42m48s
JS エンジンは評価前に変数 (または少なくともそれらのほとんど) を (レキシカル環境の名前に) バインドできるため、完全な静的スコープがパフォーマンスを向上させることがわかります。また、プログラムが読みやすくなり、混乱を招く可能性が低くなると思います。
ただし、完全な静的スコープの利点についての私の理解は、私が望んでいるほど完全ではありません。