一般情况下,谁调用就指向谁
普通模式下,普通函数中,指向window;
function foo (){
console.log(this);//指向window
}
foo ();
普通模式下全局函数可以看成window的方法,相当于window.foo ();
严格模式下,普通函数中,指向undefined;
“use strict”
function foo (){
console.log(this);//指向undefined
}
foo ();
相当于window.foo ();但是不等于window.foo ();所以是undefined;
settimeout 是全局方法,所以this的指向为window;
箭头函数的this指向
this指向定义这个箭头函数时所在环境中的this;在哪个地方定义,就指向那个地方的this;
var name = "window";
var obj = {
name : "obj",
sayHello : ()=>{
console.log(this.name);//window
}
}
//相当于
var obj = {};
obj.name = "obj";
obj.sayHello = ()=>{
console.log(this.name);//所以此时this的指向还是window
}
obj.sayHello();
改变this指向:Call apply bind;
var obj1 = {
name : "obj1",
sayHello : function(a){
console.log(this.name);
console.log(a);
}
}
var obj2 = {
name : "obj2"
}
obj1.sayHello.call(obj2,10);//指向call里的第一个参数,参数列表形式
obj1.sayHello.apply(obj2,[20]);//返回值为obj2,需要将参数放到数组里边
obj1.sayHello.bind(obj2)(30);//返回值为obj2
//取数组中的最大值最小值及其索引
var arr = [11,23,-5,1,22];
var minVal = Math.min.apply(null,arr);//当不涉及到this指向的时候直接给null就可以
console.log(minVal);
var minIndex = arr.indexOf(minVal);
console.log(minIndex);