javascript-在JSFiddle中,为什么未在`window`上定义此全局变量?
作者:互联网
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