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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • var声明及变量提升(Hoisting)机制 在函数作用域或全局作用域钟通过关键字var声明的变量,都会被当成在当...
    钢小牙阅读 3,085评论 0 1
  • 第一章 块级作用域绑定 let 和 const 都是不存在提升,声明的都是块级标识符都禁止重声明 每个const声...
    NowhereToRun阅读 5,476评论 0 2
  • 在函数作用域或全局作用域中通过关键字var声明变量,但是无论在哪里声明,都会被当成在当前作用域顶部声明的变量,这就...
    NnnLillian阅读 1,300评论 0 0
  • 原创文章&经验总结&从校招到A厂一路阳光一路沧桑 详情请戳www.codercc.com 主要知识点有:var变量...
    你听___阅读 3,805评论 0 1
  • 三个字做个好妈妈:静 弱 慈 文化是教育的旗帜,教育做到最高点就是文化,文而化之。 父母是教育的载体(资料图 图源...
    对了错了阅读 4,650评论 0 0