全局作用域默認(rèn)是window
console.log(this)

20170519105959.png
像這樣直接打出來(lái)看到當(dāng)前this指向window
function fn(){
console.log(this)
}

20170519113631.png
在全局函數(shù)里也指向window
在對(duì)象中
var obj = {
a:'xxx',
b: function(){
return this.a
}
}

20170519121020.png
看到在obj 這個(gè)對(duì)象中 return的 this.a 這個(gè)this是obj
綁定this
1.call()
func.call(指定this, 參數(shù)1, 參數(shù)2, ...)
函數(shù)實(shí)例的call方法,可以指定函數(shù)內(nèi)部this的指向(即函數(shù)執(zhí)行時(shí)所在的作用域),然后在所指定的作用域中,調(diào)用該函數(shù)。

0170519150407.png
2.apply()
func.apply(指定this, [參數(shù)1, 參數(shù)2, ...])
apply方法的作用與call方法類似,也是改變this指向,然后再調(diào)用該函數(shù)。唯一的區(qū)別就是,它接收一個(gè)數(shù)組作為函數(shù)執(zhí)行時(shí)的參數(shù)
3.bind()
bind方法用于將函數(shù)體內(nèi)的this綁定到某個(gè)對(duì)象,然后返回一個(gè)新函數(shù)。
var add = function (x, y) {
return x * this.m + y * this.n;
}
var obj = {
m: 2,
n: 2
};
var newAdd = add.bind(obj, 5);
newAdd(5)
bind方法除了綁定this對(duì)象,還將add函數(shù)的第一個(gè)參數(shù)x綁定成5,然后返回一個(gè)新函數(shù)newAdd,這個(gè)函數(shù)只要再接受一個(gè)參數(shù)y就能運(yùn)行了。
ES6 函數(shù)
()=>{}
這種函數(shù)不會(huì)改變this