# 2.Js编译过程
# 语法分析
计算机先通篇浏览代码,检查是否有错误
# 预编译
函数声明整体提升(计算机会提前阅读function) 变量 声明提升(计算机会提前阅读变量的声明)
- imply global 暗示全局变量:任何变量,如果变量未经声明就赋值,此变量就为全局对象所有
a = 10; ===> window.a = 10;
一切声明的全局变量,全是window属性
window就是全局
window就是JS里最大的仓库,任何变量和函数都会存放在这里面 如果直接 var a = 10; 再 console.log(a); 其实等于console.log(window.a); 如果是 function test() { var b = 123; } test(); 则相当于在把b放在window这个大仓库里的一个叫做test的function箱子里,此时的b属于function,而不为window所有
# 函数预编译
预编译的过程发生在函数执行的前一刻
创建AO对象 Activation Object(执行期上下文,是一个域)
找形参和变量声明,将变量名和形参名作为AO属性名,值为undefined
将实参值和形参统一
在函数体里面找函数声明,函数名作为AO属性名,其值是它本身的函数体
# 全局预编译
创建GO对象 Global Object (GO就是window )
找变量声明,将变量名作为GO属性名,值为undefined
在函数体里面找函数声明,函数名作为GO属性名,其值是它本身的函数体
# 解释执行
运行代码,解释一行执行一行(JS特点:解释性语言、单线程)