使用窗口访问全局变量

时间:2013-12-28 19:03:27

标签: javascript eval jsfiddle

为什么不window.x打印10

eval("var x = 10;");
console.log(window.x); // undefined
console.log(x); // 10

http://jsfiddle.net/kzd4z/1/

2 个答案:

答案 0 :(得分:6)

您在侧面板中选择了onLoad,它将所有内容包装在匿名函数中。如果你选择"没有包装"它有效。

演示:http://jsfiddle.net/kzd4z/2/

您可以通过查看来源看到这一点:

//<![CDATA[ 
window.onload=function(){
eval("var x = 10;");
console.log(window.x); // undefined
console.log(x); // 10
}//]]>  

答案 1 :(得分:1)

扩展 @Dennis' 答案,因为使用“No Wrap”将整个函数包装在匿名函数中,x现在是该匿名函数的本地范围的一部分。与javascript中的任何函数一样,使用关键字var创建此局部变量...您可以删除jsfiddle上的“No Wrap”选项,或者只删除var关键字(在全局范围内创建变量)。 / p>

eval("x = 10;");
console.log(window.x); // 10
console.log(x); // 10

<强> DEMO

如果我错了,请纠正我,但这看起来像是发生在我身上......