我正在学习Javascript,并且有关于提升/确定范围的问题 - 也许我错过了一些东西。
如果我定义一个全局变量,我不能在函数内引用该变量的值,因为它超出了范围?
var x = "hello";
function temp(){
console.log(x);
}
原来是
var x = "hello";
function temp(){
var x;
console.log(x);
}
两个输出都未定义。全局变量的要点是什么,或者如何在函数中使用它们? - 正如我说的,我在这里失踪了! :)
还提升功能吗?但不是匿名函数?正确?
任何帮助表示赞赏!
谢谢!
答案 0 :(得分:1)
吊装仅适用于局部变量(在当前范围内使用var
声明的变量)。由于var
中没有temp()
,因此没有悬挂。
此处x
将被悬挂:
var x = "hello";
function temp(){
console.log(x); // undefined
var x = 55
}
temp()
因为这被解释为:
var x = "hello";
function temp(){
var x /* = undefined */
console.log(x);
x = 55
}
temp()
答案 1 :(得分:0)
您可以访问范围内或更高范围内定义的任何变量。如果在您的范围内重新声明了相同的变量名称,则该变量将成为覆盖另一个变量的新变量定义。
所以,举个例子:
var x = "hello";
function temp(){
console.log(x); // outputs "hello" when temp() is called
}
x
定义在比函数更高的范围内,因此可以在函数内部使用。
在这个例子中:
var x = "hello";
function temp(){
var x;
console.log(x); // outputs "undefined" when temp() is called
// because local var x has not been assigned a value
}
您已经定义了一个新变量x
,它是函数内部的局部变量,它的值为undefined
,直到您为其赋值。
术语"吊装"表示在作用域内任何位置定义的变量(例如在函数内)的行为就好像它是在函数的最开头定义的,无论声明实际出现在何处。
所以,因为吊装,这个例子:
var x = 10;
function temp() {
x = 3;
y = 4;
var x;
console.log(x);
}
的行为与此类似,函数中对x
的所有引用都是x
的本地版本:
var x = 10;
function temp() {
var x;
x = 3;
y = 4;
console.log(x);
}