我是javascript的新手,我不确定javascript中是否有任何称为重新初始化的内容,所以如果没有这样的概念,请原谅。
如果重新初始化javascript变量会怎样? 例如:
function foo()
{
var x = 10;
.... //do something
.... //do something
.... //do something
var x = 20;
console.log("x: " + x);
}
这里的x值是多少?
答案 0 :(得分:2)
x
将为20. var
已被提升并且#34; (更多如下),这意味着在运行任何分步代码之前,变量将在函数的开头声明。 var
语句中的任何初始值设定项实际上只是一个赋值语句。
所以你的代码:
function foo() {
var x = 10;
//do something
var x = 20;
console.log("x: " + x);
}
被视为如下:
function foo() {
var x;
x = 10;
//do something
x = 20;
console.log("x: " + x);
}
当你调用一个函数时,JavaScript引擎在开始执行问题中的逐步代码之前会做几件事。它所做的一件事是查看代码并处理任何var
语句。 (虽然它被称为var
语句,但var
更多是声明。)
非常有趣,您的代码也可以这样编写:
function foo() {
x = 10;
//do something
x = 20;
console.log("x: " + x);
return;
var x;
}
它仍然有效,它会完全相同。
更多(在我的博客上):Poor, misunderstood var
ES6将引入let
,其行为不同(除其他外,它的范围限定在它所在的块中,而var
作为一个整体作用于整个函数,即使已声明在一个街区内); details on MDN
答案 1 :(得分:0)
var
关键字基本上只是确定变量的范围,并在任何代码实际执行之前处理(查找"提升")。对变量使用var
两次是多余的,但并没有特别做任何事情。最后,您只需将10
分配给x
,然后将20
分配给x
;仅此而已。
答案 2 :(得分:-1)
您可以随时运行简单测试来检查。 var
表示此变量在当前范围内。因此,在您的示例中,x
将等于20
var x = 10;
var x = 20;
var y = 10;
function Test() {
var x = 30;
y = 20;
alert('X in function: ' + x);
alert('Y is global, so it\'s ' + y);
}
Test();
alert('X outside of function: ' + x + ', also Y = ' + y);