关于JavaScript的优点:let比var的优势

Advantages of using let over var within a function

本问题已经有最佳答案,请猛点这里访问。

假设我有一段这样的代码:

1
2
3
4
5
6
7
8
9
10
11
const number = 3;

function fooFunction() {
  let numberTwo = 5;
  var answer = number + numberTwo;
  return answer;
}

finalAnswer = fooFunction();

console.log(finalAnswer);

假设使用ES2015兼容的浏览器,使用上述代码的优势/劣势将超过:

1
2
3
4
5
6
7
8
9
10
11
const number = 3;

function fooFunction() {
  var numberTwo = 5;
  var answer = number + numberTwo;
  return answer;
}

finalAnswer = fooFunction();

console.log(finalAnswer);

如果两者返回相同的数字,有什么优点或缺点吗?


正如其他人提到的,在您的示例中,您可以交替使用letvar。区别在于let是块范围的,var不是块范围的。

例如,使用var,您可以这样做(打印"foo"):

1
2
3
4
5
6
7
8
9
function printFoo(param) {
  if (param) {
    var x ="foo";
  }

  console.log(x);
}

printFoo("hello");

由于let x的作用域是if块的作用域,因此没有定义,因此不能使用let来执行此操作。


在您提供的代码示例中,这两个示例可以互换。当let派上用场时,它将范围限制为块级别,而不是功能级别。例如,在for循环的内部使用let

值得注意的是,使用var关键字创建的变量被提升,而使用let关键字创建的变量则没有提升。

凯尔·辛普森在大卫·沃尔什的博客上对这个话题进行了详细的分析:https://david walsh.name/for and against let implicit hazards