Javascript 在JSFIDLE中,为什么这个全局变量没有在“window”上定义?
我有:Javascript 在JSFIDLE中,为什么这个全局变量没有在“window”上定义?,javascript,scope,jsfiddle,Javascript,Scope,Jsfiddle,我有: 为什么a在这里没有定义?它已经在全局名称空间中定义,即,window。(有关此意外行为的示例,请参阅。)如果在未将位置设置为“No wrap”的小提琴中运行此代码,或者在任何不在顶级作用域的情况下,则外部a不是全局变量window.a。考虑一个简单的例子,您的代码被封装在一个名为 WrasPunFunc < /C> >的函数中: // THIS would be the global `a`, outside `wrappingFunc` var a = "now the global
为什么
a
在这里没有定义?它已经在全局名称空间中定义,即,window
。(有关此意外行为的示例,请参阅。)如果在未将位置设置为“No wrap”的小提琴中运行此代码,或者在任何不在顶级作用域的情况下,则外部a
不是全局变量window.a
。考虑一个简单的例子,您的代码被封装在一个名为<代码> WrasPunFunc < /C> >的函数中:
// THIS would be the global `a`, outside `wrappingFunc`
var a = "now the global a is defined";
function wrappingFunc() {
// this is NOT the global `a`
var a = 1;
function b() {
var a = 10;
alert(window.a);
}
b();
}
wrappingFunc();
当您将位置设置为
onLoad
或onDomready
时,JSFIDLE就是这么做的。(请参阅)我的wrappingFunc
示例实际上是一个onload
或ondomready
侦听器函数,这会阻止keep在全局上下文中运行。我的意思是,如果我写第一条语句时没有var,那么a=1,但是var a=undefined。我尝试了它,它发出了警报1
。对我也有效。整个代码是否在另一个范围内运行?也许是一个带有默认(wrap-in-onload)设置的JSFIDLE?例如:、和(这一个按预期工作)。它在chrome和ie11上对我有效,并发出1
警报。你使用了其他浏览器吗?代码是否封装在其他括号中?是的,我在JSFIDLE上运行此代码。我不知道JSFIDLE正在包装代码。
// THIS would be the global `a`, outside `wrappingFunc`
var a = "now the global a is defined";
function wrappingFunc() {
// this is NOT the global `a`
var a = 1;
function b() {
var a = 10;
alert(window.a);
}
b();
}
wrappingFunc();