JavaScript let和var用法

时间:2017-11-20 21:55:34

标签: javascript function variables for-loop

前段时间,我读了一些关于在JavaScript中使用let和var的文章,他们说你使用&#34; var&#34;关键字(即使在for循环中)只能在它的函数中起作用,那么为什么可以在一个函数中创建多个for循环,每个函数看起来像:for (var i = 0; i < array.length; i++); 并且JavaScript没有问题&#34;重新声明&#34; i变量?谢谢:))

4 个答案:

答案 0 :(得分:2)

JS有var的特殊情况,因为它允许提升,这意味着允许多个相同变量的声明,并且它们被移动到封闭的功能范围。但是它们仍然是相同的变量。请考虑以下代码:

function foo(){
 for(var i=0; i<3; i++){
  console.log("x");
 }
 for(var i;i<6;i++){
  console.log("y");
 }
}

foo()

请注意,在第二个循环中没有初始化i,但它会正常执行并生成3 x和3 y。它曾经是旧浏览器的问题,但新浏览器只允许它没有给出错误。

答案 1 :(得分:1)

一个看似很小的问题,答案很复杂。 var是旧方法声明。您可以根据需要随时随地声明它。 JavaScript不会在乎。所有声明的变量都可以立即使用,因为声明会被移动到函数代码的最开头。这被称为吊装。

let是声明变量的新方法。 const存在,但我们现在对此并不感兴趣。 let是块范围的。 let背后的规则和范围可能令人困惑,但它有利于学习/理解。这是JavaScript的未来。我在我的博客文章here中详细讨论了它。

答案 2 :(得分:0)

ES6引入了'let'关键字来解决此问题。它允许变量在函数内绑定到其范围,这样您就无法在外部重新声明它以防止提升问题。示例 -

for(var i=0; i<5; i++) {
    console.log(i);
}
console.log(i);

此处输出为 - 0 1 2 3 4 5 而不是5,我们必须得到'未捕获参考错误',因为变量i应该只在函数内可访问。由于JavaScript中的Hoisting,所有变量和函数名称在执行之前都存储在一个位置。所以代码实际上如下所示 -

var i;
for(i=0; i<5; i++) {
        console.log(i);
}
console.log(i);

如果您使用 let 关键字,则会解决此问题。

答案 3 :(得分:0)

let赋予您特权,以声明范围有限的变量,而不是var。

var是一个关键字,它在全局范围内定义变量,而与块范围无关。