JS:块级作用域(*****高阶底层五颗星)
1.let const
块级作用斌是在ES6提出的,在块中定义的 let const 只能在块中使用,原因是执行上下文构建时,只会登记 顶级 let const。块级作用域对var不起作用。var只有在函数中才会和全局的有所不同(函数执行上下文)。
- 执行块级作用域代码时,会新建一个文本环境《不是执行上下文)
- 将新建的文本环境(Lexical Environment)与当前执行上下文连接
- 代码块执行结束后恢复原来的连接
代码块创建文本环境的步骤与前两节提到的过理几乎是一样的,只不过不会登记 var 类型变量,因为代码块内的 var 变量在之前已经登记在执行上下文中了。
简单再闻述一下创建块级的执行上下文的过程
- 登记变量
- 查重
- 赋值
研究下面代码的执行逻辑
<script> if (true) { let j = 1 console.log(j)//1 } console.log(j)//报错,Uncaught ReferenceError: j is not defined </script>
<script> let i = 1 if (true) { let j = 1 } console.log(j);//报错,Uncaught ReferenceError: j is not defined </script>
<script> let j=2 if (true) { let j = 1 console.log(j)//1 } console.log(j)//2 </script>
第三个代码简单表示:
2.非顶级函数
为了避免ES6的块级作用域导致之前的项目出现过多错误,对函数提供了一定的宽限,具体的表现为,块
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
前端面试题 文章被收录于专栏
前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理