js特点(单线程,解释性语言)函数声明整体提升,变量 声明提升
js运行三部曲
a:语法分析(js会先去扫描文件是否存在缺失大括号,语法错误)
b:预编译
c:解释执行
1、预编译前奏
a:imply global暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象(window)所有。
b:一切声明的变量,全是window的属性
2、函数体预编译四部曲(预编译发生在函数执行的前一刻)
a:创建AO对象(执行期上下文,函数产生存储的一个库)
b:找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
c:将实参值和形参统一
d:在函数体里面找函数声明作为AO属性名,值赋予函数体
3、全局预编译(GO===window)
a:在代码定义之后执行之前生成GO(Global Object ) 空对象{}
b:查找变量,定义为GO的属性,赋值为undefined;
c:查找函数声明,将函数声明赋值给GO 即 GO[函数名] = 函数;
注:if里面不能声明函数
1 var x = 1, y = z = 0; 2 function add(n){ 3 return n = n + 1; 4 } 5 y = add(x); 6 function add(n){ 7 return n = n +3; 8 } 9 z = add(x) 10 //x 1,y 4,z 4
原文:https://www.cnblogs.com/yqyf/p/12367827.html