如果重新初始化JavaScript变量会发生什么?

时间:2015-04-01 06:49:55

标签: javascript

我是javascript的新手,我不确定javascript中是否有任何称为重新初始化的内容,所以如果没有这样的概念,请原谅。

如果重新初始化javascript变量会怎样? 例如:

function foo()
{
var x = 10;
.... //do something
.... //do something
.... //do something
var x = 20;
console.log("x: " + x);
}

这里的x值是多少?

3 个答案:

答案 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);