2012-01-01 1 views
3

JavaScriptの動的プロパティでは、 "eval"が呼び出しコンテキストを変更します。どういう意味ですか?いくつかの例が良いでしょう。JavaScriptのevalは呼び出しコンテキストをどのように変更しますか?

+5

上記の説明を読んだところからソースを追加してください。 – Starx

+0

'eval'は呼び出しコンテキストにスコープします。いくつかのコードについては、[this](http://www.bennadel.com/blog/1926-Exploring-Javascript-s-eval-Capabilities-And-Closure-Scoping.htm)を参照してください。これは、 'eval'が呼び出されるコンテキストが、評価されるコードが実行されるコンテキストであることを意味します。 –

+0

http://www.langnetsymposium.com/2009/talks/18-LarsBak-JavaScript.html – dalibocai

答えて

4

evalは間接的に呼び出されたときにコンテキストを変更しません。それをグローバルコンテキスト(すべての関数のデフォルトコンテキスト)に変更します。

var myObj = { a: 1 } 

function someFunc() { 
    console.log(eval('this.a')) // 1 
    console.log(eval('this === myObj')) // true 

    var indirectEval = eval 

    console.log(indirectEval('this.a')) // undefined 
    console.log(indirectEval('this === window')) // true 
} 

void someFunc.call(myObj) 

直接evalコールはコンテキストを変更しません(スコープを変更しません)。

詳細は“Global eval. What are the options?”を参照してください。

3

http://jsfiddle.net/9h6n7/1/

「」変数は、コンテキストの一部であり、evalのは、それを変更します。
呼び出しコンテキストは、eval呼び出しを囲む変数です。この場合は、ブラウザの変数「a」とブラウザの「this」だけです。

var a = 1; 
eval("a = 2;"); 
alert(a); // 2 

http://jsfiddle.net/9h6n7/2/より明確である例:

function executeEval(){ 
    eval("a = 2;"); 
} 

var a = 1; 
executeEval(); 
alert(a); // 2 
+0

あなたの呼び出しの定義コンテキストは、関数呼び出しのシーケンスである私の理解とはかなり異なっています。私はより明確な答えのために少し待つだろう。 – dalibocai

+0

コールコンテキストとは、呼び出しが行われたスコープからアクセス可能なすべての変数を意味します。「this」、ローカル変数、クロージャ取得変数、グローバル変数です。 – clyfe

+0

私はそれを得た。 +1してください。 – dalibocai

0

私はあなたが実行コンテキストではなく、呼び出し元のコンテキストを意味すると仮定します。

これを説明するのはあまり意味がないようです.JavascriptやThe Good Partsなどを扱うオンラインの記事がたくさんあります。ここで

では、Googleで上位に来たのリンクです:http://ajax.sys-con.com/node/676031

+0

リンクされたテキストを読み取ることはできません。巨大な広告がすべてのページをカバーしています。 – katspaugh

+0

@katspaugh、私のブラウザではありませんが、いずれにしても、印刷バージョンがうまくいくかもしれません:http://ajax.sys-con.com/node/676031/print – Lucero

+0

Gosh、彼らは印刷物バージョン。しかし、それははるかに良いです。ありがとう! – katspaugh

関連する問題