预编译四部曲
1、创建AO对象(执行期上下文)
2、寻找形参和变量声明,将变量名和形参名作为AO属性名。值为undefined.
3、将实参与形参相统一
4、在函数体寻找函数声明,AO对应属性值赋予函数体
例
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> function fn(a){ console.log(a); var a=123; console.log(a); function a(){ } console.log(a); var b=function(){}; console.log(b); function d(){ } } fn(1); </script> </body> </html>
函数预编译过程
1、创建AO对象
AO{
}
2、寻找形参和变量声明,将变量名和形参名作为AO属性名。值为undefined.
AO{
a : undefined
b : undefined
}
3、将实参与形参相统一
AO{
a : 1
b : undefined
}
4、在函数体寻找函数声明,AO对应属性值赋予函数体
AO{
a : function() a{}
b : undefined
d : function d(){}
}
js是解释性语言,读取一行,解释一行,在执行函数之前,先进行预编译,
此时代码内 a b d 的值为
AO{
a : function a(){}
b : undefined
d : function d(){}
}
接着逐行读取代码,覆盖变量值。在预编译已编译的在执行时不再编译。
执行结果:
全局预编译
1、创建一个GO对象(全局变量对象windoww)
2、寻找变量声明,将变量名作为AO属性名。值为undefined.
3、在函数体寻找函数声明,AO对应属性值赋予函数体
例
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> console.log(a) var a = 234 function a(){} console.log(a) </script> </body> </html>
预编译过程
1、创建一个GO对象(全局变量对象windoww)
GO {}
2、寻找变量声明,将变量名作为AO属性名。值为undefined.
GO{
a : undefined
}
3、在函数体寻找函数声明,AO对应属性值赋予函数体
GO{
a : function a(){}
}
执行结果
javascript的预编译练习题:https://www.cnblogs.com/2016-zck/p/11018464.html