一条js问题,谁能详细帮我解释吗?
关注者
5被浏览
588登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
这段代码主要是考察this指向的问题,因为print是用function来定义的,在调用的时候才能决定,因此谁调用的,this就指向谁。
我们直接按照代码来分析
var num = 10;
var obj = {
num: 8,
inner: {
num: 6,
print: function () {
console.log("num:" + num + ",this.num:" + this.num);
},
},
};
num = 888; // 在执行任何输出之前,进行了赋值操作,那么全局下的num(即window.num)为888
// 第1个num无争议,任何时候都是输出window.num,即888
// 因为是ob.inner调用的print(),那么this指向到inner,即6
obj.inner.print(); // 888, 6
// 相当于
// fn = function () {
// console.log("num:" + num + ",this.num:" + this.num);
// }
var fn = obj.inner.print;
// 执行fn时,this指向到window,即this.num输出为888
fn(); // 888, 888
// 前面的输出对当前的方法没有影响,原样执行
obj.inner.print(); // 888, 6
// obj.inner.print = obj.inner.print的操作,会返回pirnt的函数体,即
// function () {
// console.log("num:" + num + ",this.num:" + this.num);
// }
// 然后立即执行这个函数体,this指向到window
(obj.inner.print = obj.inner.print)(); // 888, 888