最近、私はこれを読んだことがあります。(これらのアドバイスは変数スコープが動的なCommonLispユーザに与えられたように)「Javascript:閉鎖変数へのアクセスが遅い理由
var a = 'a'; function createFunctionWithClosure() { var b = 'b'; return function() { var c = 'c'; a; b; c; }; } var f = createFunctionWithClosure(); f();
f
が呼び出されたときに、a
を参照すると、c
を参照するよりも遅くなる、b
を参照するよりも遅いです。
それはローカル変数にCを参照すると、Bよりも高速であることは極めて明白だが、iterpreterが適切に書かれている場合(動的スコープなし - チェインハッシュテーブルのルックアップのようなもの。)の速度差はわずかでなければなりません限界。か否か?
長寿(と私の好奇心)については、v5でどのように変化しているのかを説明できますか? – Hogan
匿名関数の中で 'var d = eval(" this ");'を実行すると、スコープチェーンルックアップはすべてのコンテキストをクロールして 'a'の参照を取得しますか?それとも 'this'を' d'に割り当てるのか? – headacheCoder
@headacheCoder:これは、ある種の "古い"ブラウザで実行されると非常に可能です。しかし、実際にはこういった恐ろしい声明は決して行うべきではありません。最先端のブラウザは 'eval'を使って物事を最適化することさえできます。しかし、これらのブラウザーはとにかくES5仕様に従います。 – jAndy