JS变量
1.全局变量:定义在script标签的第一层的变量
2.在if语句,循环中属于全局变量
3.局部变量:在函数内部变量,只在函数内部使用或在子级函数使用
预编译前奏
1.暗示全局变量(imply golbal):任何变量未经声明直接赋值 次变量为全局所有
暗示的,不推荐使用,拖慢速度
例子:b = 10;
2.一切声明的全局变量全是window的属性
全局变量会被挂载的window
正式预编译
js在运行时三步骤(三部曲)
1.语法解析(通篇扫描)
2.预编译(预解析)
3.解释执行
预编译(预解析)
1.函数声明整体提升(90%的问题),过于简单不够全面,表达式不提升
2.变量声明提升
函数预编译 四步骤 四部曲
1.创建AO对象(activation object)
2.找形参和变量声明,将变量和形参作为AO对象的属性,值为undefined
3.形参和实参相统一
4.在函数体内找函数声明,值赋予函数体
一般都是在第二步找到函数声明,当函数不执行时,值为undefined
eg:console.log(a);结果:undefined
if(false){
function a(){}
}
函数预编译发生在函数执行的前一刻,函数执行完毕销毁AO对象,每次函数执行都会进行预编译
AO运行期上下文/执行期上下文
当函数执行时,会创建一个称为执行期上下文的内部对象,一个执行期上下文定义
了函数执行时的环境,函数每次执行时对应的执行期上下文都是独一无二的,所以多次
调用一个函数会导致创建多个执行期上下文,当函数执行完成,执行期上下文被销毁
函数预编译 四步骤 四部曲
预编译作用:用来调和矛盾的
全局预编译
原文:https://www.cnblogs.com/chenhuaiyou/p/14790307.html