预解析内容

37 阅读1分钟
 var obj ={name:'jack'} //1
 function fn(){         //2
     obj.name ='rose';  //3
     obj={};            //4
     obj.name='jerry';  //5
     console.log(obj.name); //6
 }
 fn(); //7     
 console.log(obj.name); //8
 

解析:

顺着向下,遇见fn();调用函数在函数内,未定义变量,故不做变量提升,即在//3中,修改全局的obj,全局obj被修改为{name:'rose'};接着往下//4中,修改全局表的obj,成新的空对象;在//5中给空对象添加了name属性,对应值为jerry;引用数据类型值改变,受影响,故在//8中输出全局变量时,那么属性值变更为jerry;