请解释一下为什么我的代码似乎可以使用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
"错误。
原因:
-
在第一个函数中,由于关键字
var
变量作用域是局部的,因此您可以在循环for
后访问变量i
。 -
在第二个函数中,由于关键字
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;
}