成大事不在于力量的大小,而在于能坚持多久。

预编译

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

 

posted @ 2020-03-20 19:01  雪绒花1124  阅读(148)  评论(0)    收藏  举报