ES6 let 和const

一、var 的缺陷:var 只有全局作用域和函数作用域,没有块级作用域,除了在函数内部的变量默认都属于window

        var foo='hello';
        fn=function(){
            var foo='world'
        }
        fn();
        console.log(foo);//hello
        if(true){
            var foo='bar'
        }
        console.log(foo);//bar

二、let 定义变量:ES6新增可以定义块级作用域,但是没有变量提升,必须先声明再使用,不能重复声明,主要是解决了var没有块级作用域的缺陷

        let foo='hello';
        if(true){
            let foo='bar';
            if(true){
                let foo='vue';
                if(true){
                    // 也有块级作用域链
                    console.log(foo);//vue
                }
                console.log(foo);//vue
            }
            console.log(foo);//bar
        }
        console.log(foo);//hello

三、const 定义常量:也是ES6新增的可以定义块级作用域,用于定义常量,常量不允许修改,并且声明的同时必须赋值,也没有变量提升,不允许重复声明,并且const比let的效率高

        const foo='hello';
        if(true){
            const foo='bar';
            if(true){
                const foo='vue';
                if(true){
                    // 也有块级作用域链
                    console.log(foo);//vue
                }
                console.log(foo);//vue
            }
            console.log(foo);//bar
        }
        console.log(foo);//hello

四、使用建议:不要使用var,使用let和const,如果你使用的这个成员,一次都没有变过,则使用const定义,如果至少变了一次,则使用let定义。

更多详细知识点,请参考ECMAScript 6 入门

原文地址:https://www.cnblogs.com/EricZLin/p/9366543.html