作用域

2017-12-13  本文已影响0人  饥人谷_御风

1.作用域是什么?

1.1 编译原理

var a = 2;
// 代码会被分成右面这些词法单元:var、a、=、2、;

对于JavaScript来说,大部分编译发生在代码执行前的几微秒。


1.2 理解作用域

总结:变量赋值:首先编译器会在当前作用域中声明一个变量,然后在运行时引擎会在作用域中查找该变量,找到及赋值。

function foo(a) {
    console.log(a);         //2
}

foo(2)

步骤解析:

  1. 引擎为foo进行RHS引用
  2. 作用域给引擎这个foo的值。
  3. 引擎执行foo
  4. 引擎对a进行LHS引用
  5. 作用域把foo里面的形式参数a给引擎
  6. 2赋值给a
  7. 为console进行RHS引用
  8. 为a进行RHS引用

1.3 作用域嵌套

遍历嵌套作用域链:引擎从当前的执行作用域开始查找变量,找不到则到上一级去查找,当抵达最后一层全局作用域时,则强制停止。


1.4 异常

ReferenceError:RHS查询在所有嵌套作用域中无法遍寻到所需的变量,引擎就会抛出ReferenceError异常

TypeErroe: 对所操作的变量进行非法或者不合理操作

上一篇下一篇

猜你喜欢

热点阅读