本文隶属于分类

编程语言

广告推荐

技术交流学习或者有任何问题欢迎加群

编程技术交流群 : 154514123 爱上编程      Java技术交流群 : 6128790  Java

标签:blog   bsp   scrip   进行   大括号   不可   输出   cal   cti   

 

简单来说是: 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中var、let、const区别?

标签:blog   bsp   scrip   进行   大括号   不可   输出   cal   cti   

原文:https://www.cnblogs.com/susan-home/p/8664277.html

技术交流学习或者有任何问题欢迎加群

编程技术交流群 : 154514123 爱上编程      Java技术交流群 : 6128790  Java

广告推荐

讨论区