0

私がグローバル機能を持​​っているとしましょう:

function Init()
{
       var v = 10;
       window.GlobalFunction = function()
       {
          // Global Function has access to v, because of closure
          alert(v);
       }
}

Init();

FireBugコンソールからvの値を取得するにはどうすればよいですか?そこにブレークポイントを置いて価値を見ることができます。しかし、これは私には十分ではありません。サードパーティのWebサイト用にFireFoxアドオンを構築したいので、この変数にアクセスする必要がありますが、ソースコードを変更できません。

4

2 に答える 2

2

あなたが言うようにグローバル変数の場合、コンソールに入力してその値を取得vできるはずです。v

がグローバルでない場合vは、それを含む関数内からのみアクセスできます。JavaScript は関数スコープの言語であり、varキーワードは変数が現在のスコープ内でのみアクセス可能であることを示します。ブレークポイント/デバッガーを使用したくない場合、ソースを変更できない場合、およびソースに変数の getter メソッドがない場合は、うまくいかない可能性があります。

Initここで創造的になろうとすると、のプロトタイプまたはそれを含むオブジェクトに基づいてオブジェクトを作成し(newキーワードなどを使用して)、オブジェクトのバージョンに getter 関数を追加できる場合があります。次に、以前に元のコードのオブジェクトを使用していた場所で、新しいオブジェクトを使用します。

于 2012-04-22T20:59:16.233 に答える
0

変数をキャプチャした関数の外部からクロージャによってキャプチャされた変数にどのようにアクセスできるかを意味する場合は、できません。コンソールは状態への特別なアクセスを提供しません。eval()現在のブレークポイントで実行しているかのように (またはブレークポイントにいない場合はグローバルに) JavaScript を実行します。JavaScript から変数にアクセスできない場合は、コンソールからもアクセスできません。

vご指摘のとおり、スコープ内にある場合、つまりスコープ内にあるブレークポイントで停止している場合にのみアクセスできますv

于 2012-04-23T06:08:29.227 に答える