题目描述
以下代码:
var name = "林二二";
var obj = {
name: "林一一",
fn: function () {
var name = "小三";
return function () {
return this.name;
};
},
};
console.log(obj.fn()()); // 林二二
为什么输出是全局的name?
自己的思路
上面代码之所以输出全局下的name,是因为this指向了window
但是为什么它会指向window?
this不是应该指向调用它的调用者吗?
原因是因为它是匿名函数还是和‘return’的机制有关?
obj.fn()()
和obj.fn()
是不一样的,obj.fn()
可以理解为obj调用它的fn函数,此时fn的调用者是obj,所以fn里的this指向obj,那么obj.fn()()
呢,这是obj.fn()
先返回一个函数,然后这个函数再调用,此时这个函数相当于是无主的,里面的this在非严格模式下指向window,严格模式下是undefined