一、this语句的用法
在 JavaScript 中,
this
是一个关键字,表示当前函数执行时的上下文对象
二、this的指向
1.在全局作用域中,this指向Window
2.在自调用函数时,原则上this会指向window,若函数开启严格模式,this指向undefined
严格模式:开启严格模式后,函数内部和外部的作用域都不会受到影响,也就是说,开启严格模式只会对当前函数起作用,不会影响其他函数或全局作用域。
在函数开头加上
3.事件的回调函数事件中,this的指向事件源
4.函数的this一般情况下是谁调用,this指向谁
5.构造函数的this指向构造出来的实例化对象
6.立即调用函数中的this指向window
7.定时器中的this指向window,如果有变量接受定时器,那么this指向那个变量
三、改变this的指向方法
可以使用三种方法改变this的指向:call()、apply()和bind()
// call函数作用 1 让函数执行 2 改变函数this指向
// 参数 第一个参数是this指,第二个参数开始传递给函数的实参
const res = fn.call(obj,1,3)
console.log(res)
// apply函数作用 1 让函数执行 2 改变函数this指向
// 参数 第一个参数是this指,第二个参数是一个数组,数组里放的是传递给函数的实参
const res = fn.apply(obj, [1, 3])
// bind函数作用 改变函数this指向
// 参数 第一个参数是this指,第二个参数开始就是实际的参数
// bind返回值一个新函数(改变this指向之后的函数),不会立即调用
const res = fn.bind(obj, 1)
const r = res(5)
console.log(r)
apply还可以调用数组min或max方法
const arr = [10, 7, -3, 12, 8]
console.log(Math.max(1, 2, 3))
console.log(Math.max(arr))
// apply可以调用max,可以接受数组参数,this不需要改变写成null
console.log(Math.max.apply(null, arr))
console.log(Math.min.apply(null, arr))
console.log(Math.max(...arr)) // 展开运算符