var in_window = 'a' in window;
alert(in_window);
var a = 1;
//a = 1;
如果我用var
声明a
,那么in_window
将是true
。但是,如果我不使用var
声明a
,那么in_window
将是false
。
var
在这里使用和不使用之间到底有什么区别var
?
此代码不在函数内部。在我看来,无论是否使用 var,我都认为 a 是一个全局变量。但是为什么 in_window 的值不一样。
var in_window = 'a' in window;
alert(in_window);
var a = 1;
//a = 1;
如果我用var
声明a
,那么in_window
将是true
。但是,如果我不使用var
声明a
,那么in_window
将是false
。
var
在这里使用和不使用之间到底有什么区别var
?
此代码不在函数内部。在我看来,无论是否使用 var,我都认为 a 是一个全局变量。但是为什么 in_window 的值不一样。
Javascript 中的每个变量都存在于一个上下文中。当您不使用var
来声明它时,它会被放入顶级上下文中,在浏览器的通常情况下,它就是window
对象。在 node.js 中,在服务器上运行,它将是该系统的顶级上下文。
因此,使用该var a = 1
行,a
将其放入其函数的上下文中。在窗口中的a = 1 line, it goes in the window, causing
a 是真实的。我希望你在实践中没有使用引号。
您在这里错过了一件事;Javascript 解析器在实际解释函数之前通读每个函数以查找所有变量和函数声明。函数中两个语句的顺序无关:
var f = function() {
alert(a in window);
var a = 0;
};
本质上,如果您使用 var,它会在您的本地范围内创建一个变量。如果不这样做,它会在全局范围内创建它。此外,如果您使用 var,它会将定义“提升”到函数的顶部。例如:
var a = 1;
function b() {
alert(a); //alerts 1 (global)
a = 2; //global is now 2
alert(a); //alerts 2
}
function c() {
alert(a); //alerts undefined, var a got hoisted to the top
var a = 3; //local = 3
alert(a); //alerts 3
}
b();
c();
alert(a); //alerts 2 (global);