您的当前位置:首页正文

第一章作用域是什么

来源:华拓网

1.1 编译原理

编译语言

  • 分词/词法分析

  • 解析/语法分析

  • 代码生成

对于Javascript来说,大部分情况发生在代码前的几微秒(甚至更短!)的时间内。在我们所要讨论的作用域背后,Javascript引擎用尽了各种办法(比如JIT,可以延迟编译甚至重编译)来保证性能最佳

1.2理解作用域

1.2.1 演员表

  • 引擎
  • 编译器
  • 作用域

1.2.2 对话

变量的赋值操作会执行两个动作,首先编译器会在当前作用域中声明一个变量(如果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对它赋值

1.2.3 编译器有话说

赋值操作的目标是谁(LHS)

谁赋值操作的源头(RHS)

a = 2 是LHS引用

console.log(a); 是RHS引用

1.2.4 引擎和作用域的对话

1.2.5 小测验

检验一下到目前的理解程度。 把自己当作引擎, 并同作用域进行一次“ 对话” :

function foo(a) {
  var b = a;
  return a + b;
}
var c = foo( 2 );
  1. 找到其中所有的 LHS 查询。( 这里有 3 处! )

    c = ..;、 a = 2( 隐式变量分配)、 b = ..

  2. 找到其中所有的 RHS 查询。( 这里有 4 处! )

    foo(2..、 = a;、 a ..、 .. b

1.3 作用域嵌套