2016-04-13 3 views
0

私は就職活動のために勉強していて、JavaScriptを使い始めました。これで終わりました。だから、strictモードでのevalへの間接呼び出し。 xはどうなるの?

"use strict"; 

var x = 0; 
var y = 0; 

eval("x=3;y=11;"); //direct call to eval in global scope 

console.log("x: " + x); // outputs 3 
console.log("y: " + y); // outputs 11 

しかし:

"use strict"; 

var x = 0; 

(0, eval)("x=3;y=11;"); //indirect call to eval in global scope 

console.log("x: " + x); // outputs 0 because the strict mode won't allow the reassignment? 
console.log("y: " + y); // outputs 11 

私は知らない/ evalのが実行されたときのxと何が起こるかを理解しています。私は厳格なモードで割り当てが問題なく通過することを知っています。誰も私にこれを説明して喜んでですか?ありがとう!

+1

私のコンソールに3が表示されます。 –

+1

^同じです。このコードをどのような環境で実行していますか? –

+0

両方のコードセクションが同じように動作します –

答えて

0

Node.jsがどのように変数を扱うかがわかります(デフォルトにはグローバルではありません)。 evalへの間接呼び出しはグローバルオブジェクトに代入します。

"use strict"; 

var x = 0; 

(0,eval)("x=3;y=11;"); 
x++; 
console.log("x: " + x); // outputs 1 
console.log("global x: " + global.x); // outputs 3 
console.log("y: " + y); // outputs 11 
+2

これらの変数*がノード内でグローバルではないように見えます:-) – Bergi

関連する問題