题目
时间:2022-3-3
var num = 10
var obj = { num: 20 }
obj.fn = (function (num) {
this.num = num * 3
num++
return function (n) {
this.num += n
num++
console.log(num)
}
})(obj.num)
var fn = obj.fn
fn(5)
obj.fn(10)
console.log(num, obj.num)
你认为的结果是什么?
。。。。
实际结果
22、23、65、30
执行解析
(1)前面都是函数部分,当到 var fn = obj.fn开始重点;
第3行:obj.fn 可以自动立即执行,obj.fn = (function (num) 的 num 为内部(函数内部) num;
函数里的 this 指向 window,所以全局 num 变成 60,内部 num 变成 21;并返回一个函数【没执行】;
(2)此时走到 fn(5),函数直接在全局里面执行,所以走到 第6行,this 指向 window,全局 num 变成 65,内部 num 变成22,输出 22;
(3)obj.fn(10),此时 this 指向 obj 对象,走入第 6 行,输入的参数为10,所以 obj 内的 num 变成 30,内部 num 变成 23,输出 23;
(4)console.log(num, obj.num),输出全局的 num 和 obj 的 num,输出 65、30;
如有疑惑,或者错误请指出,非常感谢?