编程语言
首页 > 编程语言> > javascript-在JSFiddle中,为什么未在`window`上定义此全局变量?

javascript-在JSFiddle中,为什么未在`window`上定义此全局变量?

作者:互联网

我有this code in a fiddle

var a = 1;  

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

b();  

为什么在这里未定义?它已经在全局名称空间(即window)中定义. (有关此意外行为的示例,请参见the fiddle.)

解决方法:

如果您在未将位置设置为“不自动换行”的小提琴中运行此代码,或者在任何不在顶级范围内的情况下运行,则外部a都不是全局变量窗口. .考虑一个简单的示例,其中将代码包装在一个名为wrapperFunc的函数中:

// 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时,这正是JSFiddle所做的. (请参见What is the difference between onl oad, onDomready, No wrap – in <head>, and No wrap – in <body>?)我的wrapperFunc示例实际上是一个onload或ondomready侦听器函数,它阻止了keep在全局上下文中运行.

标签:scope,jsfiddle,javascript
来源: https://codeday.me/bug/20191119/2037394.html