Javascript 使用窗口访问全局变量

Javascript 使用窗口访问全局变量,javascript,eval,jsfiddle,Javascript,Eval,Jsfiddle,为什么window.x不打印10 eval("var x = 10;"); console.log(window.x); // undefined console.log(x); // 10 您在侧面板中选择了onLoad,它将所有内容包装在匿名函数中。如果你选择“不包裹”,它会起作用 演示: 您可以通过查看源来查看此信息: //<![CDATA[ window.onload=function(){ eval("var x = 10;"); console.log(window.x);

为什么
window.x
不打印
10

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

您在侧面板中选择了
onLoad
,它将所有内容包装在匿名函数中。如果你选择“不包裹”,它会起作用

演示:

您可以通过查看源来查看此信息:

//<![CDATA[ 
window.onload=function(){
eval("var x = 10;");
console.log(window.x); // undefined
console.log(x); // 10
}//]]>  
//
展开答案,因为使用“不换行”将整个函数包装在匿名函数中,所以x现在是该匿名函数的局部作用域的一部分。与javascript中的任何函数一样,使用关键字
var
创建此局部变量。。。您可以删除jsfiddle上的“No Wrap”选项,或者只删除var关键字(在全局范围内创建一个变量)


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

根据您提供的来源,我不清楚问题出在哪里。[我理解您的解释,它被包装在一个匿名函数中。因此,当定义
x
时,
this
上下文不是
window
(全局)当定义
x
-
var
时,该
不起作用,只是意味着变量是函数的局部变量,因此它不会附加到
窗口
eval("x = 10;");
console.log(window.x); // 10
console.log(x); // 10