一条js问题,谁能详细帮我解释吗?

var num = 10; var obj = { num: 8, inner: { num: 6, print: function () { con…
关注者
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