Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
515 views
in Technique[技术] by (71.8m points)

哪位大佬可以帮忙详细解释这段代码运行的过程

var foo={n:1};
(function(foo){
    console.log(foo.n);
    foo.n=3;
    var foo={n:2};
    console.log(foo.n);
})(foo);
console.log(foo.n)
依次打印1 2 3

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...