在 JSFiddle 中,为什么这个全局变量没有在 `window` 上定义?
In JSFiddle, why is this global variable not defined on `window`?
var a = 1;
function b() {
var a = 10;
alert(window.a);
}
b();
为什么a
在这里没有定义?它已经在全局命名空间中定义,即 window
。 (有关此意外行为的示例,请参阅 the fiddle。)
如果您 运行 此代码位于未将位置设置为 "No wrap" 的 fiddle 中,或者您不在顶部的任何情况-级别范围,您的外部 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();
当您将位置设置为 onLoad
或 onDomready
时,这正是 JSFiddle 所做的。 (参见 What is the difference between onLoad, onDomready, No wrap - in <head>, and No wrap - in <body>?)我的 wrappingFunc
示例实际上是一个 onload
或 ondomready
侦听器函数,它防止在全局上下文中保持 运行。
var a = 1;
function b() {
var a = 10;
alert(window.a);
}
b();
为什么a
在这里没有定义?它已经在全局命名空间中定义,即 window
。 (有关此意外行为的示例,请参阅 the fiddle。)
如果您 运行 此代码位于未将位置设置为 "No wrap" 的 fiddle 中,或者您不在顶部的任何情况-级别范围,您的外部 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();
当您将位置设置为 onLoad
或 onDomready
时,这正是 JSFiddle 所做的。 (参见 What is the difference between onLoad, onDomready, No wrap - in <head>, and No wrap - in <body>?)我的 wrappingFunc
示例实际上是一个 onload
或 ondomready
侦听器函数,它防止在全局上下文中保持 运行。