12

私は JavaScript の Strict Mode の使用について少し調べていますが、一般的に言えば、JS エンジンがコードをより適切に最適化できるようにするために、より厳格なルールのセットをコーダーに強制することが考えられているようです。Visual Basic の "Option Explicit" に相当する JavaScript のように感じられます。

これが基本的に Strict Mode をコードに適用することの正味の効果である場合、パフォーマンスの違いは、ケースバイケースではなく習慣から適用する価値があるでしょうか? コードの安定性以外に考慮すべき利点はありますか?

スクリプトに厳密モードを適用する主な理由は何ですか?

4

3 に答える 3

6

厳密モードのコードは、最適化を困難にする問題 (たとえば、頭のてっぺんから) を取り除くため、確実にパフォーマンスが向上します。

  • ステートメントは削除されましたwith(最適化は、不可能ではないにしても非常に困難です)。
  • 宣言されていない割り当てやその他の禁止事項はもうありませんdelete varName;
  • eval変数/関数宣言をローカル スコープに導入しません。
  • arguments.callee削除されました (最適化が困難です (例:関数のインライン化))
  • オブジェクト インデックスのarguments名前付きプロパティは、名前付き仮パラメーターに動的にマップされなくなりました。
于 2011-01-25T22:14:22.300 に答える
1

これを使用する理由は、John Resig ( http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ ) によって詳しく説明されていると思いますが、 Firefox はそれをサポートするようです ( http )。 ://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/、少なくともライブラリについては、調べると役立つ場合があります。

しかし、基本的には、いくつかの一般的なプログラミングエラーを防ぐのに役立ちますが、一部の人にとってevalはそれを使用しない理由になる可能性があります。名前のない無名関数を持たないことは難しいでしょうが、エラーを減らすのに役立つものは何でも価値があります。

于 2011-01-25T21:58:49.560 に答える
0

パフォーマンスがそれだけの価値があるかどうかはわかりませんが、結果は異なる可能性があると思います. それはあなたのスクリプトに依存すると思います。しかし、これは重要なポイントではなく、コードの保守にかかる時間を短縮することを意味します。したがって、コードを維持する時間 (およびお金) を節約し、コードを高速化するものはすべてゴールデンです。

私は修正されましたが、悲しいことに、強い型付けは含まれていません。コンパイル時にエラーを検出するためにタイピングを強制するために研究者が何年も費やしてきましたが、今ではコードが適切であると信頼するか、手作業または単体テストで検証する必要があります。私見ですが、単体テストに費やされる時間は通常、多くの場所で不足しており、コンパイラが実行できることに費やすべきではありません。

于 2011-01-25T21:57:57.740 に答える