美文网首页
1.let-const-var

1.let-const-var

作者: dptms | 来源:发表于2017-10-27 14:12 被阅读16次

    var

    在 es6 中引入了 let 和 const 关键字声明变量,弥补了 var 关键字的缺陷

    • function scope 函数作用域,如果在函数中声明的变量,外部是访问不到的。
    • 声明的变量是可以重新覆盖定义。
    var a = 4;
    function test(){
        var a = 3;
    }
    console.log(a); // 结果:4
    

    let

    • block scope 块级作用域,在大括号中声明的变量,外部是访问不到的。 const 类似。
    var price = 100;
    var count = 10;
    if(count > 5){
        const discount = price * 0.6;
        console.log(`The discount is ${discount}`); // 结果:The discount is 60
    }
    console.log(discount); // 结果:Uncaught ReferenceError: discount is not defined
    
    • 在同一个作用域下,不能重复定义同一变量,const 类似。

    const

    • constlet 不同的地方是,let 声明的变量是可以改变的,const 是不行的。

    如果是引用类型的值

    const person = {
        name:'Dp',
        age:30
    }
    person = {name:'tms'}; // 报错
    person.age = 40; // ok
    

    ps : 以上的例子一个是改变了对象,一个是改变了对象的属性,如果完全不想更改一个对象,可以使用Object.freeze(obj)

    再来个例子

    for (var i = 1; i < 10; i++) {
        console.log(i);
        setTimeout(function () {
            console.log(`i:${i}`);
        }, 1000);
    }
    

    这里把 var 可以换成 let,const试试。

    ES6暂时性死区

    console.log(color);
    var color = 'yellow';
    
    • 以上,var 的情况会变量提升,会报 undefined;
    • 如果换成 letconst ,会报 ReferenceError: color is not defined;

    在 ECMAScript 2015 中,let 绑定不受变量提升的约束,这意味着 let 声明不会被提升到当前执行上下文的顶部。在块中的变量初始化之前,引用它将会导致 ReferenceError(而使用 var 声明变量则恰恰相反,该变量的值是 undefined )。这个变量处于从块开始到 let 初始化处理的”暂存死区“之中。 参考,

    如果选择声明变量的方式

    • 默认使用 const
    • 会重新更新变量使用 let
    • 不应该在ES6中使用 var

    相关文章

      网友评论

          本文标题:1.let-const-var

          本文链接:https://www.haomeiwen.com/subject/hlnkuxtx.html