ES6学习-1.块级作用域绑定

2018-01-23  本文已影响14人  Zip_Wang

首先这个系列的文章只是一个笔记性质的,方便以后的翻看和查阅。内容来自于NICHOLAS.C.ZAKAS所写,刘振涛翻译的《深入理解ES6》,大家如果喜欢可以购买。


首先我们要搞明白为什么要有“块级作用域绑定”,那是因为原先我们使用var声明变量不管是在全局还是函数内部,最后都会被当做在当前作用域顶部声明的,这就是俗称的“提升”机制。例如下面的示例代码:

虽然value的初始化是在condition成立的条件下执行的,但是再其他作用域范围内也是可以访问的,js并不会报错,代码的输出如下:

这就是为什么要有“块级作用域”。

1、使用“let”声明

代码示例如下:

如果使用ES6的let声明变量,就没法再其它域内访问变量了。输如下:

2、使用“const”声明

const声明的是常量,声明的时候一定要初始化具体的值,一旦初始化了,就不能修改它的值。作用域的范围和let是一样的。

但有一点就是用const声明对象的时候,不能修改对象本身,但是可以修改对象属性的值。示例代码如下:

编译器报错了,person整个对象不能修改

3、循环中使用“let”和“const”

(1)以前循环使用var定义一个i,那么在循环外面也可以访问i这个变量。如果使用let定义,那么这个变量就不能访问了,代码示例如下:

这里外部也可以访问i 这里就不能访问i

(2)循环中的函数,直接来看代码

上面的代码结果是只会输出10次数字10,如果没用let来声明i,那么我们会用IIFE表达式来解决这个问题,如果用let声明i,那么结果就是输出数字0~9。

(3)我们也可以在循环中使用const,但是一旦是用const那么这个变量则不能修改,一旦修改就会报错,所以一般const只会用于for-in或者for-of。

4、全局块作用域绑定

一般我们使用var声明变量,那么这个变量就会绑定到window上面,所以我们很容易覆盖其他的变量。但是使用let则不会绑定到window上面。

上一篇下一篇

猜你喜欢

热点阅读