JavaScript中varletconst区别?

Posted sunshine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中varletconst区别?相关的知识,希望对你有一定的参考价值。

 

简单来说是: let是修复了var的作用域的一些bug,变的更加好用。let是更好的varvar的作用域是函数作用域由var定义的变量,它作用域在一个函数体内,而不是我们其他语言理解的大括号{ }内。而let是块级别(大括号括起来的内容)

const声明的变量只可以在声明时赋值,不可随意修改,这是最大的特点。

使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;

使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;

使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。

var a = [];

    for (let i = 0; i < 10; i++) {

      a[i] = function () {

        console.log(i);

      };

    }

    a[6](); //6

console.log(a[6]); //  function(){console.log(i)}

 

既然循环结束后,数组a的每一项都是function(){console.log(i)},那么a[6]()输出是6是怎么实现的?难道let保存了10个状态?

这是因为 javascript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

var a = [];for (var i = 0; i < 10; i++) {

  a[i] = function () {

    console.log(i);

  };}

a[6](); // 10

上面代码中,变量ivar命令声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),里面的i指向的就是全局的i。也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10

也就是,循环结束后,数组a的每一项都是function(){console.log(i)}。在执行a[6]函数前,此时i的值已经是10了。

以上是关于JavaScript中varletconst区别?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中varletconst区别?

JavaScript 各声明varletconst方式区别『详解』

JavaScript 各声明varletconst方式区别『详解』

varletconst区别

JS --- varletconst三者的区别

varletconst的区别