什么是预编译呢
在函数(JS)执行的前一刻,会创建一个叫做执行期上下文的(AO)对象这个创建执行期上下文的过程叫做预编译
预编译发生在函数执行的前一刻
在初期我们知道 这只是比较浅的
函数声明整体提升 会把函数声明提到最上边
变量 声明提升 但是赋值没有被提升
预编译的过程(四部曲)
1、创建AO对象
创建AO对象(Activation Object){
执行期上下文
}
2、找形参和变量声明 将变量和形参作为AO属性名 值为undefined
AO{
这是第二步
a:undefined, 因为变量名和形参名一样 所以只写一个就好
b:undefined,
第三步
接下来将参数传进去 将实参值和形参统一
a:1,
b:undefined
第四步 在函数体里面找函数声明 值赋予函数体
a:function a(){},
b:undefined,
d:function d(){},
}
3、将实参值和形参统一
4、在函数体里面找函数声明 值赋予函数体
全局的预编译和函数内的一样
只是全局生成了一个GO对象
<script>
function fn(a){
console.log(a); //ƒ a(){}
// 这个打印的是 函数声明
var a = 123;
console.log(a); //123
// 这个打印的是变量a
function a(){}
console.log(a); // 123
// 这个打印的是变量a
var b = function (){}
console.log(b); //function(){}
// 这个打印的是 函数声明b
function d(){}
}
fn(1)
// 预编译发生在函数执行的前一刻
</script>
解题步骤在上面
来源:https://blog.csdn.net/qq_44936905/article/details/99056808