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%内容,订阅专栏后可继续查看/也可单篇购买

前端面试题 文章被收录于专栏

前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理

全部评论
怎么后面的内容不见了?
点赞 回复 分享
发布于 2023-03-28 14:36 广东

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务