美文网首页
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

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

网友评论

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

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