ES6-作用域

ES6块级作用域

块级作用域

1.在ES6之前JavaScript是没有块级作用域的,所有的变量都通过var关键字去声明,即在控制语句中的变量也可以在外部的作用域去访问。

2.随着ES6的到来JavaScript给我们带来的let 和 const关键字,也让它本身拥有了块级作用域的概念( { }内部都是块级作用域,在测试小demo的时候可以使用{ }来创建一个块级作用域来避免变量名称的冲突 )。我们在控制语句中使用let 和 const定义的变量外部是不可以访问的。如果全局作用域中没有定义相同名称的变量会报相应的错误:

for循环中使用const定义的变量在全局作用域访问
for循环中使用let定义的变量在全局作用域访问

3.用处:在你需要一些临时的变量的时候,块级作用域就可以发挥他的作用。而通过创建块级作用域,我们就不会担心会不会搞乱其他人定义的全局变量,我们就可以根据自己的想法来定义自己的变量了。

ES6新增let , const和var的区别

1. 首先let和const定义的变量拥有块级作用域

2.拥有暂存性死区

3.var声明的变量拥有变量提升( 即在定义之前去访问该变量,会默认赋值undefined,这是因为JS的预解析会将var声明的变量提升,并提前赋值 ),const和let没有变量提升

3.

const定义的变量必须赋值,否则会抛出对应的错误

4.

const定义的变量不可以重新定义否则会报错;

5.const定义的是一个常量( 字母全部大写即为常量 ),它定义的变量是不可以被修改的。

全局作用域

JavaScript中的全局作用域中的变量,在任何地方都是可以访问的,全局作用域中的变量在定义的时候生成,浏览器关闭的时候销毁。    

函数作用域

js中可以通过函数来创建一个独立作用域称为函数作用域,函数可以嵌套,所以作用域也可以嵌套;

自由变量的概念

在当前作用域没有定义的变量,但是却被访问了。向上级作用域一层一层向上查找,直到找到全局作用域,如果没有找到会抛出:xx is not defined 的错误;

作用域链:自由变量的向上级作用域一层一层查找,直到找到为止,最高找到全局作用域,就形成了作用域链。

let块级作用域的使用


JavaScript代码


输出效果


分析
解决方案


效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容