var foo={n:1}; //全局作用域下的foo变量,是一个对象,引用类型
//然后是一个立即执行的匿名函数,传入上面的foo,由于是引用类型
//所以匿名函数参数的foo即是对上面那个foo的引用
(function(foo){
console.log(foo.n);//这里的foo就是全局作用域下的foo,n为1,所以第一次打印出1
foo.n=3;//这里是设置全局作用域下的foo中n属性,将n变为3
var foo={n:2};//这里是在这个匿名函数作用域内新建的一个foo变量,由于作用域不同,不覆盖全局作用域下的foo变量
console.log(foo.n);//这里由于是在匿名函数作用域内,首选打印匿名函数作用域内的foo.n,也就是上面的2
})(foo);
console.log(foo.n);//最后,由于匿名函数中改变了全局作用域中的foo.n为3,所以打印出3
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…