执行上下文
* 当执行one的时候,会创建一个执行上下文
* 编译阶段
* 创建VO
* 1. 处理参数,把参数放入VO
* 2. 扫描所有代码,找出function声明,从上往下依次执行 在编译阶段,会处理所有的函数声明,如果有重复的声明
* 后面会覆盖前面的声明
* 3.扫描var关键字 var是不赋值,只声明,值是undefined
* 4.在编译阶段不会处理let变量的,let的变量也不会放在VO里
* 编译完成
* 开始执行阶段
function one(m, n) { //let oneVO={m:1,,n:2,fn:()=>2,a:undefined,b:undefined} //let oneEC={VO,this:window,scopeChain:[oneVO,globalEC.VO]} console.log(m, n);//1,2 var a = 1; function fn() { return 1; } function fn() { return 2; } var b = 2; var b = 3; let c = 4; console.log(a, b, c, fn); } one(1, 2);
1。 处理参数,把参数放入VO
oneVO={m:1,,n:2,fn:()=>2,a:undefined,b:undefined}
2. 扫描所有代码,找出function声明,从上往下依次执行 在编译阶段,会处理所有的函数声明,如果有重复的声明 后面会覆盖前面的声明
oneVO={m:1,,n:2,fn:()=>2,a:undefined,b:undefined}
3. 扫描var关键字 var是不赋值,只声明,值是undefined
oneVO={m:1,,n:2,fn:()=>2,a:undefined,b:undefined}
越努力越幸运