美文网首页程序员
作用域是什么

作用域是什么

作者: 翔子丶 | 来源:发表于2020-07-16 11:10 被阅读0次

编程语言基本功能:能够储存变量中的值,并在之后对其进行访问或修改

设计一套规则来存储变量,并在之后方便找到,这个规则就是作用域

1.1 编译原理

传统编译语言,源代码执行后经历三个步骤,成为编译

  • 分词/词法解析

    将字符串分解成有意义的代码块(词法单元)

  • 解析/语法解析

    将词法单元流转换成由元素逐级嵌套所组成的代表程序语法结构的树(抽象语法树)

  • 代码生成

    AST转换成可执行代码,与语言、目标平台相关

简单说就是某种方法可以将var a = 2;的AST转换为一组机器指令,用来创建一个a的变量(包括分配内存等),并一个值储存在a中

JavaScript引擎更加复杂,在语法解析和代码生成阶段有特定步骤对运行性能进行优化

任何js代码片段在执行前都要进行编译(执行前的几微秒),并且通常会立即执行

1.2 理解作用域
  • 引擎:负责整个JavaScript程序的编译和执行结果
  • 编译器:负责语法解析及代码生成等
  • 作用域:负责收集并维护由所有声明的标识符(常量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限
var a = 2;分解

编译器首先将程序分解为词法单元,再将词法单元解析为一个树结构

赋值操作两个动作:编译器声明变量,运行时引擎查找变量

  1. 遇到var a,编译器在作用域中查找该变量是否存在,存在编译,不存在声明
  2. 为引擎生成运行时所需代码,处理a=2这个赋值操作;在当前作用域中查找此变量,找不到继续往上找

引擎最终找到a变量,并将2赋值给a

LHS引用和RHS引用

LHSRHS含义是:赋值操作的左侧和右侧,更好的理解是:赋值操作的目标是谁,谁是赋值操作的源头

RHS(retrieve his source value)查找某个变量的值,获取,LHS试图找到变量的容器本身,对变量进行赋值

function foo(a) {
    var b = a
    return a + b
}
var c = foo(2)
// LHS 1.c = .. 2.隐式变量赋值a=2 3.b=...
// RHS 1.foo(2) 2. = a 3.a+.. 4. ...+b
1.3 作用域嵌套

在当前域中无法找到变量时,引擎会继续项外层嵌套的作用域中去查找

1.4 异常

区分LHSRHS作用,在变量未声明前,查询行为不一样

RHS引用找不到变量时,引擎会抛出ReferenceError,LHS引用找不到变量时,会在全局作用域创建,在严格模式下,也会抛出ReferenceError异常

相关文章

  • JavaScript作用域与作用域链

    一. 作用域 JavaScript作用域是什么? 作用域指的就是变量存在的范围 我们的作用域又分成了全局作用域和...

  • JavaScript 作用域链与闭包

    作用域链与闭包 了解作用域链之前需要先了解下作用域是什么。 作用域 几乎所有的语言都有作用域的概念。这是因为它们都...

  • JS三座大山之作用域和闭包(2)

    作用域 作用域是什么?其实作用域是针对变量的,一个变量在某个区域内起作用,这份区域就是他的作用域。顺便说一句,在 ...

  • 作用域链

    作用域链是什么? 如果要解释作用域链得先知道什么是作用域?什么是闭包? 什么是作用域 用域是一个函数在执行时期的执...

  • Html/CSS 作用域

    作用域是什么:有效的范围 1.ES5 中作用域 在ES5中只有函数有作用域,其他没有作用域的概念。所以当在使用的时...

  • 理解作用域链

    作用域是什么? 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与...

  • 作用域链与闭包

    1.作用域链 1.1 作用域链是什么? 作用域链正是内部上下文所有变量对象(包括父变量对象)的列表。首先,代码在其...

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

网友评论

    本文标题:作用域是什么

    本文链接:https://www.haomeiwen.com/subject/doqphktx.html