乐趣区

关于前端:js-关于this的指向

最近没事干,在牛客网上刷题,刷到一个 this 指向的题。感觉有必要记录一下,顺便学习了。
先上题目:

执行下列选项的程序,输入后果不是 Window 对象的是()

// A
setTimeout(function(){console.log(this);
},1000);

// B
function Star(){console.log(this);
}
new Star();

// C
var o = {sayHi:()=>{console.log(this);
    }
}
o.sayHi();

// D
(function(){console.log(this);
}());

答案是:B,上面来解释一下起因。

  1. 没有非凡场景,默认绑定,this就指向window
  2. 有关键字 new,this 就指向new 进去的那个对象
  3. 看上去是 obj 在调用,然而实际上用了箭头函数,所以 this 还是指向 window, 起因 是箭头函数没有本人的 this,只能向外层寻找,因而还是指向 this
  4. 没有非凡场景,默认绑定,this就指向window

总结:

  1. 谁调用 thisthis 就指向谁
  2. fn() 赤裸裸的,默认绑定,指向 this,无论在哪里调用实际上是 window.fn() window 调用,指向window
  3. obj.fn() 隐式绑定,指向 obj,obj 在调用
  4. call()、apply()、bind 显式绑定,要指向谁就写在 () 外面
    5. new fn() new 绑定,指向 new 创立的对象
退出移动版