代码分析
function fn(a){
console.log(a); //function(){}
var a = 2;
function a(){};
console.log(a); //2
}
fn(1);
1、初始化函数fn执行上下文;
2、建立阶段:
参数a赋值1,b为undefined;函数声明a;变量a赋值为2;
确定作用域链;确定this的值;
fnExecutionContext = {
variableObject: {
arguments: { 0: 1, length: 1 },
a: pointer to function a(),
b: undefined
},
scopeChain: { ... },
this: { ... }
}
3、执行阶段:
第一个a,函数声明提升【只有函数声明才存在函数提升】,为a();
第二个a,var a = 2;变量赋值为2;
fnExecutionContext = {
variableObject: {
arguments: { 0: 1, length: 1 },
a: 2,
b: undefined
},
scopeChain: { ... },
this: { ... }
}
参考文章
https://blog.csdn.net/iamchuancey/article/details/78230791
https://www.cnblogs.com/ssh-007/p/5064699.html