美文网首页
ES6学习-1.块级作用域绑定

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

作者: Zip_Wang | 来源:发表于2018-01-23 16:22 被阅读14次

    首先这个系列的文章只是一个笔记性质的,方便以后的翻看和查阅。内容来自于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上面。

    相关文章

      网友评论

          本文标题:ES6学习-1.块级作用域绑定

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