发表于: 2019-12-17 23:48:10
1 1129
今日完成的事
调试接口进行demo
明日计划的事
进行demo
收获
{}
对变量提升的影响
{} 对于各个声明的变量提升,从以下示例代码的输出可以看出,影响是不同的。
① 对于 var ,没什么影响,似乎{} 是透明的;
② 对于 let 和 const ,也没什么影响,这就是它们该有的结果;
③ 对于 function ,有影响:{} 阻止了 function 的赋值提升!它如果在 {} 之内定义,则并不能提升到 {} 之前,但它依旧可以在 {} 之后访问到。
运行结果引发了后面的疑问。
{} 是块级作用域吗?
几乎目前读到的 ES6 书籍,都谈到 {} 是块级作用域。
没错,在其他语言中,比如 C、C++、Java 中,{} 确实是块级作用域。
但是从上面代码的示例代码结果中,你也可以看到,在 ES6 中的 {},并不完全等同于其他语言中的{}。比如 function 为什么可以在块级作用域之外可以访问?它不应该被摧毁了吗?
以及 ES6的块级作用域,是否是一个“伪”块级作用域?只是因为 let 和 const 声明的变量的作用域,造成了这种假象。
其实上述的结果是因为,代码没有运行在 'use strict'; 下。
关于es6块级作用域内函数声明的问题:在严格模式下,函数声明是有块作用域的。依旧会进行变量提升,提升至当前作用域头部。
try/catch 不是块级作用域
catch 中声明的 x 在外部依旧可访问(但是 e 不可以)。
该文章下面有一条对此的解释:
catch 确实会对作用域链做一个小动作,这个小动作就是把 catch(e) 中的 e 单独放入一个作用域,然后把这个作用域加入作用域链的最前端。
评论