在严格模式下普通函数的this指向undeifned
箭头函数的this看是否有外层函数,如果有的话,指向上级this,指向箭头函数所在作用域的this
事件处理函数的this指向事件源
构造函数this指向当前实例对象
方法里面的this指向调用者
普通函数的this指向了window
定时器匿名函数的this指向调用者
使用call和apply调用时,this是指向那个对象
call方法和apply方法都是调用了一个函数,第一个参数为指定this的值,后续参数为传递过的参数,不同的是apply方法接受的是一个参数数组
function fn (a, b) {
console.log(this, a, b);
}
let obj = {uname :'阿飞', age :22};
fn.call(obj, 111, 222);
let arr = [23, 66, 15, 7, 9, 34];
let re = Math.max.apply(null, arr);
console.log(re);
bind()方法创建一个新的函数,相当于返回了一个改变this指向的函数,但是不会自己执行
<input type="button" value="点击发生验证码">
<script type="text/javascript">
let btn = document.querySelector('input');
btn.addEventListener('click', function () {
this.disabled = true;
// 开启定时器
setTimeout(function () {
this.disabled = false;
console.log(this)
}.bind(this), 5000);
});