在以下代码中解释javascript中var和let关键字之间的区别

时间:2018-03-22 13:07:45

标签: javascript ecmascript-6

请你解释为什么我的代码似乎与var一起使用但不允许,片段在下面?

使用var的片段



function revarr(arr) {
  for (var i = 0; i < arr.length / 2; i++) {
    [arr[i], arr[arr.length - 1 - i]] = [arr[arr.length - 1 - i], arr[i]];
  }
  return arr;
}

console.log(revarr([1, 2, 3]))
&#13;
&#13;
&#13;

使用let:的代码段

&#13;
&#13;
function revarr(arr) {

  for (let i = 0; i < arr.length / 2; i++) {
    [arr[i], arr[arr.length - 1 - i]] = [arr[arr.length - 1 - i], arr[i]];
  }
  return arr;
}

console.log(revarr([1, 2, 3]))
&#13;
&#13;
&#13;

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

基本上<a:LongitudinalTracker z:Id="i58"> <Name xmlns="http://schemas.datacontract.org/2004/07/HmsSim.EntityModule.BaseTypes" i:nil="true"/> <a:FMax xmlns:b="http://www.w3.org/2001/XMLSchema" i:type="b:string"/> <a:K>2</a:K> <a:KVy xmlns:b="http://www.w3.org/2001/XMLSchema" i:type="b:string"/> <a:Td xmlns:b="http://www.w3.org/2001/XMLSchema" i:type="b:string"/> <a:VyLim xmlns:b="http://www.w3.org/2001/XMLSchema" i:type="b:string"/> </a:LongitudinalTracker> 关键字声明变量,这些变量对使用它的语句,块或表达式的范围有限。 let关键字定义变量全局或局部范围。

如果我们尝试var,在第一个函数中循环console.log(i)后,值将显示在控制台中。但是,如果我们在第二个函数中for循环后尝试console.log(i),那么我们将得到&#34; for&#34;控制台出错。

<强>原因:

  1. 由于ReferenceError: i is not defined关键字,第一个函数变量范围是本地的,因此您可以在var循环后访问变量i

  2. 由于for关键字,第二个函数变量范围受限,因此您只能访问let循环内的变量i

  3. 示例:

    for