【ES6】let、const、var详解

let

let用于声明变量。

特点:

1. let不能重复声明变量

2. let声明的变量不会变量提升

3. let声明的变量不属于顶层对象

4. let声明的变量具有块级作用域

    //let生成了对应的块状作用域,找到i值
    let arr = [];
    for (let i = 0; i < 2; i++) {
        arr[i] = function () {
            console.log(i);
        }
    }
    arr[0]();   //0
    arr[1]();   //1
    //for循环 到i=2结束,期间 并没有执行内部函数,在执行函数时,找到的是上层作用域i=2
    var arr = [];
    for (var i = 0; i < 2; i++) {
        arr[i] = function () {
            console.log(i);
        }
    }
    arr[0]();   //2
    arr[1]();   //2

const

const用于声明常量。

特点:

1. 声明常量用大写,必须赋初始值

2. 常量不能修改

3. 声明的变量具有块级作用域

4. 使用const声明的变量也不属于顶层对象

    //const生成常量
    const A = 717;

let、const、var的区别

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

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

3.使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。
【ES6】let、const、var详解_第1张图片

名词含义

变量提升:当使用var声明一个var变量时,该变量会被提升到作用域的顶端,但是赋值的部分不会提升。

    console.log(a);

    var a = 'boo'

在声明a的语句之前就可以输出a,值为undefined,这就是变量提升。

使用let声明变量时不能变量提升。

块级作用域:一个花括号 代表一个块级作用域

在函数里使用var声明了一个变量,那么这个变量在整个函数内都是有效的,例如在for循环里用var声明一个变量,在for循环外也是可以使用的。但是let作用域是块状作用域,只在作用域里有效,例如在for循环里用let声明一个变量,在for循环外面是不能被访问的。

顶层对象,在浏览器中指的是window,在node环境中指的是global对象。

var声明的变量属于顶层对象window,因此可以通过 window. 变量名 来访问这些变量,而let和const声明的变量不能这样访问。

你可能感兴趣的:(javascript,开发语言,ecmascript)