用下面的代码解释一下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:var = var = 函数

解释一下Windows dos中的符号

JavaScript代码document.all(i).tagName

JavaScript代码document.all(i).tagName

javaScript作用域