2011-11-14 9 views
1

Javascript関数はオブジェクトで、スコープチェーンが関連付けられています。 定義されたときに有効であったスコープ・チェーンとは異なるスコープ・チェーンを持つクロージャーが存在する場合。例えば、呼び出し関数は、スコープ・チェーンのある他の(親)関数の戻り関数オブジェクトです。多数のプライベート変数 を呼び出すと、親関数の既存の継承スコープチェーンとバインドされた古い変数が使用されます。javascript closure scope chain-スコープチェーンにバインドされた変数を表示する方法は?

親機能を調べなくてもスコープチェーンに関連付けられた変数をチェックする方法はありますか?

理想的には、親関数で定義された変数を追跡する必要がありますが、私の質問は親関数の参照なしで、スコープチェーンに関連付けられた変数を参照できますか?

有効な場合は、スコープチェーンに関連付けられた変数の現在の値を確認できますか?

誰かがスコープチェーンの構造を教えてもらえますか(少なくとも、私はそのスタックのようなCPUスタックがないと知っていますが、それ以外のものはありますか?)。

+1

1)私はこれを理解するのが難しいと思っています。あなたの質問を肉体にするためのいくつかのコード例を提供できますか? 2)何らかの特別な理由*なぜ*あなたがこの種のものをしたいのですか? – hugomg

答えて

1

スコープ付き変数は、同じコンテキストで作成された関数で使用できます(JavaScriptは機能的にスコープされています)。

あなたはそれらにアクセスできますが、報告方法を実行することはできません。

var obj = (function (config) { 
return { 
    getTest: function() { 
    return config.test; 
    } 
}; 
}({test: 1})); 

ニックZackasは(私はそれがここだと思う:http://googlecode.blogspot.com/2009/06/nicholas-c-zakas-speed-up-your.html)スコープチェーンについての良いプレゼンテーションを行っている:

を、これは一般的な要件であれば、私は「設定」変数に便利な内部変数を維持示唆しますそれ以外の場合は、Chromeのようなデベロッパーツールでブラウザを使用します(Firebugはスコープ変数が何であるかを忘れていることがよくあります)。

+0

ポインタのおかげで、ニックは関数オブジェクトのスコーププロパティについて話しています。それは読み込み用に利用可能ですか?私は内部使用のためだけにそれを信じています。 –

+1

APIはそれをコードに公開しませんが、ブラウザアドオンが使用するには、APIをあるレベルで公開する必要があります。 – AutoSponge

関連する問題