用下面的代码解释一下javascript中var和let关键字的区别
Posted
技术标签:
【中文标题】用下面的代码解释一下javascript中var和let关键字的区别【英文标题】:Explain the difference between var and let keyword in javascript in the following code 【发布时间】:2018-08-31 22:37:37 【问题描述】:请您解释一下为什么我的代码似乎可以使用 var 而不是 let,sn-ps 在下面?
带有 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]))
带有 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]))
感谢您的帮助。
【问题讨论】:
What's the difference between using "let" and "var" to declare a variable?的可能重复let
版本确实工作。
您使用的是哪个浏览器? IE6 ?????
^^ 两者都不起作用,因为破坏起作用的地方,let
也起作用。
最大的不同在于,在 let 示例中,索引计数器“i”的作用域仅适用于 for 循环(这意味着如果您在var 示例你会得到 2,但如果你在 let 示例之后执行它,你应该得到类似 undefined)
【参考方案1】:
基本上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;
【讨论】:
但是在 let 代码中,在 for 循环之后我们没有对 i 做任何事情。在 for 循环之后,我们只是返回了反转的数组。 let i 仅在定义其范围的 for 循环内使用..我很困惑?以上是关于用下面的代码解释一下javascript中var和let关键字的区别的主要内容,如果未能解决你的问题,请参考以下文章
javascript代码,希望高手分析解释一下下面这段函数是啥意思?谢谢了!
JavaScript代码document.all(i).tagName