ES6 中的 let 和 const

来源:互联网 发布:淘宝自制美白面膜 编辑:程序博客网 时间:2024/05/17 02:34

以前我们在定义变量时用的是 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(); // 11a(); // 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) //结果 underfindvar 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的这些写法,对我个人来说感觉还是挺好的,方便,对我们写代码也去起到一定的规范作用。