前言
关于JavaScript的this指向问题,建议手动操作打印下
每天一道面试题,以后只更新于微信订阅号"夜雨成诗",点击右面的扫码关注即可
内容
题目
var name = '222'
var a = {
name: '111',
say: function() {
console.log(this.name)
}
}
var b = {
name: '333',
say: function(fn) {
fn()
}
}
a.say()
b.say(a.say)
答案
a.say() //111
b.say(a.say) //222
解析
a.say()//this指向a,所以console.log(this.name)打印的值为111
b.say(a.say) //将a.say函数作为参数传给b.say(),而b.say中调用fn(),fn()并没有绑定在某一对象上,所以执行时this指向了window,因此执行a.say的时候,a.say()中的this指向window,所以打印的值也就是222
结论
那么this有哪些指向呢?
1. 在非严格模式下,全局作用域下的普通函数的this指向window,严格模式下,this为undefined的。
2. 在对象中,this指向被调用的对象。
3. 在构造函数中,this指向实例对象。
4. 在箭头函数中,this指向外层作用域的this。