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

查看:65
本文介绍了javascript - 哪位大佬可以帮忙详细解释这段代码运行的过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

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

这篇关于javascript - 哪位大佬可以帮忙详细解释这段代码运行的过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆