ES6 中的 let 和 const

以前我们在定义变量时用的是 var ,而es6 又给我们提供了两种方法 let 和 const (const 是定义常量的)。今天我就来总结一下let 和const 。比较简单,大神么鸟我。

一、let 定义变量。

我们使用let定义的变量和 es5 中 var 定义的变量具有一下区别。

1. let定义的变量具块儿级有作用域
什么是块儿级作用域,就像 {} 花括号内的,为块儿级作用域。所以let 在块级作用域内声明后,块儿级作用域外面是访问不到的。

function a(){
    let b = 10;
    console.log(b)  //10  可以方问
}
a();
console.log(b);  //报错  Uncaught ReferenceError: b is not defined

而如果我们将上面的 let 改为 var声明变量是不会出现报错的。这个let 声明的变量很好的解决了我们以前的闭包问题。 闭包问题不懂的可以看看我以前文章http://blog.csdn.net/webxiaoma/article/details/53213113
我们如果用var 声明变量会产生以下情况

 function a(){
    var b = 10;
    function c(){
        b++;
        console.log(b)
    }

    return c;
 }
 d = a();
 d(); // 11
 d(); // 12

这是应为 当变量d 引用 函数c时 形成了闭包。变量b 在被引用后不会立即回收,而是存储起来了。所以每次执行d(); b变量都会累计加一,有时候我们需要改变这种情况,以前我们会这么做。

function a(){
    var b = 10;
   (function c(){
        b++;
        console.log(b)
    })()
}

a(); // 11
a(); // 11

其实现在我们完全可以用es6的let去这么写

function a(){
    let b = 10;  // 只需要将我们第一次的代码的 var 改为 let即可。
    function c(){
        b++;
        console.log(b)
    }

    return c;
 }
 d = a();
 d(); // 11
 d(); // 11

2. let定义的变量不会被提升。

let 声明的变量是不会被提升的。例如在es5中我们这样做。

console.log(a) //结果 underfind
var a = 5;

浏览器并不会报错而是 underfind,这是因为变量a 被提升了,不知道变量提升 原则的可以看看我以前的文章:http://blog.csdn.net/webxiaoma/article/details/52431203

而我们用let声明的变量 这样写浏览器会直接报错

   console.log(a) //Uncaught ReferenceError: a is not defined
   let a = 5;

3. let定义的变量不能够被覆盖,但是值可以被修改。

let声明的变量不可以被修改,例如:

   let a = 5;
   let a =6;
   console.log(a) //报错 'a' has already been declared

而如果是用var 去声明的变量,会直接覆盖掉a以前的值。虽然let声明的变量不可以被修改,但是我们可以更改它的值
例如:

let a = 5;
a =6;
console.log(a) // 结果 6;

一、const 定义常量。

1.什么是常量,常量在es6 中是不能被修改的。

const声明的常量 同样具有let
的上述三个特点。唯一不同的是,let声明的变量,变量指针是不能被修改的,但是指针所指的地址的值是可以被修改的,而const声明的常量,是都不可以被修改的,否则浏览器会错。

 const a = 5;
 a =6;
 console.log(a) //报错 Assignment to constant variable.

上边代码运行会报错,而let和var声明的变量是不会报错的。

es6的这些写法,对我个人来说感觉还是挺好的,方便,对我们写代码也去起到一定的规范作用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值