知识点
谁调用就指向谁
面试题
var name = 222;
var a = {
name: 111,
say: function () {
console.log(this.name)
}
}
var fun = a.say
fun()
a.say()
var b = {
name: 333,
say: function (fun) {
fun()
}
}
b.say(a.say)
b.say = a.say
b.say()
/**
* 过程讲解
* 1 name = 222;
* 2 a = {} //简写
* 3 fun = a.say
* 4 fun = a.say = function(){console.log(this.name)} ; 这里fun()指向fun,fun是全局声明的,所以指向window;输出222
* 5 a.say();指向a,输出111
* b.say(a.say)=b.say(function(){console.log(this.name)}) 这里相当于fun调用,也就是fun.call(window),输出222
* 7 赋值后相当于b调用,所以是333
*/
推论及注意点
注意就近原则