普通函数的this
1.全局环境下以及函数直接调用,this都始终指向window
2.this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,那么func中的this就是obj
3.使用call,apply,bind(ES5新增)绑定的,this指的是 绑定的对象
箭头函数中的this
普通函数和ES6的箭头函数除了this指向不同之外还有什么不同?
A.箭头函数作为匿名函数,不能作为构造函数,不能使用new关键字
B.箭头函数不绑定arguments,用rest参数...解决
C.箭头函数会捕获其上下文的this值,作为自己的this值
D.箭头函数当方法使用,没有定义this的绑定
E.使用call()和apply()调用,传入参数时,参数一的改变对this没有影响
F.箭头函数没有原型属性
箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值;
箭头函数可以方便地让我们在 setTimeout ,setInterval中方便的使用this,因为一般定时器的this都是指向windows,所以容易造成干扰。
var obj = {
func: function() {},
say: function () {
var that = this; //此时的this就是obj对象 我们通常用的方法
setTimeout(function () {
console.log(this)
that.func()
});
}
}
obj.say();
var obj = {
say: function () {
setTimeout(() => {
console.log(this)
});
}
}
obj.say(); // obj