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();