Skip to content

Latest commit

 

History

History
33 lines (27 loc) · 1.47 KB

作用域.md

File metadata and controls

33 lines (27 loc) · 1.47 KB

概念

用来存储变量,并之后可以快速方便的找到这些变量的规则 作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对 变量进行赋值,那么就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。赋值操作符会导致 LHS 查询。=操作符或调用函数时传入参数的操作都会导致关联作用域 的赋值操作。

那么是怎么设置作用域的规则呢?

  1. 编译原理
    举例var a = 1 这段代码
  • 编译器会吧这段代码进行词法分析转换成 var , a , = , 1 代码块,这些代码块叫做词法单元
  • 编译器将这些词法单元进行解析(语法分析)形成一个由元素逐级嵌套所组成的程序语法结构的树。简称抽象语法树(AST) 图1 图2、AST
  • 将AST转换成机器可执行的指令

错误区别

  • ReferenceError 同作用域判别失败相关,而 TypeError 则代表作用域判别成功了,但是对 结果的操作是非法或不合理的。

词法作用域

  • 无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处 的位置决定。
欺骗词法
  • js有两种方法 eval 和 with
eval
function foo(str,a){
    eval(str)//欺骗!
    console.log(a+b)
}
var b  = 2
foo(`var b = 3`,1)