JS JavaScript 作用域 全局作用域 局部(函数)作用域 块级作用域(es6 之后才有) 作用域链 变量在寻找值的时候是先在当前的作用域中开始寻找,如果当前作用域中有则读取的是当前作用域的变量,如果当前作用域中找不到该变量,则会顺着作用域链去外层寻找 预编译 预编译是上下文创建之后, js代码执行前的一段时期, 在这个时期, 会对js代码进行预处理 全局上下文创建后,会生成变量对象VO,VO首先寻找变量声明,将var声明的变量作为VO对象的属性名,值为undefined。然后寻找函数声明,属性值为函数本身,如果函数名与变量名冲突,函数声明会将变量声明覆盖 全局预编译 console.log(a) var a = 100; function a () { } console.log(a) // 第一个log输出 函数a本身 // 第二个log输出 100 函数预编译 函数上下文创建后,会生成变量对象AO 寻找变量声明, 变量名作为AO对象的属性名, 属性值置为 undefined 寻找形参, 形参名作为AO对象的属性名, 属性值置为 undefined 将实参的值赋予形参, 即…