前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >作用域是什么?

作用域是什么?

作者头像
用户3258338
发布2019-12-10 16:24:01
1.3K0
发布2019-12-10 16:24:01
举报

我还是会不断想起那些关于你的瞬间


最近的生活是黑白的,没有什么前言。宝宝们,生活多彩吗?

最近的文章被尧尧吐槽有些水,因为我家的两个猫不让我敲键盘。这个理由能勉强接受吗?

为什么会有作用域?

程序需要一套规则来存储变量,并且之后可以方便的找到这些变量。这套规则就称为作用域。

1.1 编译原理


nuxt.js应用一个完成的服务器请求到渲染的流程

在传统编译语言的流程中,程序中的一段源代码在执行之前会经历以下三个步骤,统称为“编译”:

  • 分词/词法分析 将字符组成的字符串分解成有意义的代码块,这些代码块叫做词法单元
  • 解析/语法分析 将词法单元流转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树,这个树被称作“抽象语法树”(AST)。
  • 代码生成 将AST转换成可执行代码的过程叫做代码生成。这个过程与语言、目标平台等息息相关。

对于JS来说,大部分情况下的编译发生在代码执行前的几微秒(甚至更短)的时间内。

1.2 理解作用域


相关内容:

  • 引擎 从头到尾负责js程序的编译和执行过程
  • 编译器 负责语法分析及代码生成等工作
  • 作用域 负责收集并维护所有生命的标识符组成的一系列查询,并实施一套严格的规则,确定当前执行的代码对这些标识符的访问权限

1.3 作用域嵌套


当一个块或者函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。因此在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,知道找到该变量,或者抵达最外层的作用域为止,无论找到还是没找到,查询过程都会停止。

1.4 作用域嵌套


当一个块或者函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。因此在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,知道找到该变量,或者抵达最外层的作用域为止,无论找到还是没找到,查询过程都会停止。

1.4 LHS & RHS


LHS:目的是对变量赋值

RHS: 目的是获取变量的值

LHS和RHS查询都会在当前作用域中开始,如果有需要,就会向上级作用域继续查找目标标识符,每次上升一级作用域,最后抵达全局作用域(顶层),无论找到或者没找到都会停止。

不成功的RHS引用会导致ReferenceError异常。不成功的LHS引用会导致自动隐式创建一个全局变量(非严格模式下),或者抛出ReferenceError异常(严格模式下)。

愿我们有能力不向生活缴械投降---Lin

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 女程序员的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档