执行上下文

* 当执行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}
越努力越幸运
原文地址:https://www.cnblogs.com/guangzhou11/p/14663762.html