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



请解释一下为什么我的代码似乎可以使用var但不能使用let,片段如下?

带有变量的代码段:

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]))

代码段与 let:

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]))

感谢您的帮助。

基本上let关键字声明变量,这些变量的作用域仅限于使用它的语句、块或表达式。 var关键字定义变量全局或局部范围。

如果我们尝试console.log(i),在第一个函数中循环for然后值将显示在控制台中。但是如果我们试图在第二个函数for循环后console.log(i)那么我们将在控制台中得到" ReferenceError: i is not defined "错误。

原因:

  1. 在第一个函数中,由于关键字var变量作用域是局部的,因此您可以在循环for后访问变量i

  2. 在第二个函数中,由于关键字let变量作用域受到限制,因此您只能在循环for访问变量i

例:

function revarr(arrV){
    var arr = arrV;
    for(var i=0;i<arr.length/2;i++){
        [arr[i],arr[arr.length-1-i]]=[arr[arr.length-1-i],arr[i]];
    }
    console.log(i); // output
    return arr;
}
function revarr(arrVal){
    for(let i=0;i<arrVal.length/2;i++){
        [arrVal[i],arrVal[arrVal.length-1-i]]=[arrVal[arrVal.length-1-i],arrVal[i]];
        console.log(i); //output
    }
    console.log(i);  //ReferenceError: i is not defined
    return arrVal;
}

最新更新