在JSFiddle中,为什么这个全局变量没有定义在' window '上?

In JSFiddle, why is this global variable not defined on `window`?

本文关键字:定义 window JSFiddle 为什么 全局变量      更新时间:2023-09-26

我有一个小提琴代码:

var a = 1;  
function b() {  
    var a = 10;  
    alert(window.a);  
}  
b();  

为什么这里没有定义a ?它已经在全局命名空间中定义,即window

如果您在没有位置设置为"No wrap"的情况下运行此代码,或者您不在顶级作用域的任何情况下,您的外部a而不是全局变量window.a。考虑一个简单的例子,您的代码被包装在一个名为wrappingFunc的函数中:

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

当您将位置设置为onLoadonDomready时,这正是JSFiddle所做的。(参见onLoad, onDomready,无换行

和无换行之间的区别是什么?)我的wrappingFunc示例实际上是onloadondomready侦听器函数,它防止keep在全局上下文中运行。