<div id="father">
<div id="son"></div>
</div>
<script src="jquery-1.11.3.js"></script>
<script>
$(function(){
$("#son").fadeOut(3000,function(){this.remove()});
});
</script>
如上的简单代码,页面加载完,#son在3秒内淡出页面,然后从dom树删除。
上面的方法可以实现。
但是当我把fadeOut中的回调函数改成箭头函数,如下:
$(function(){
$("#son").fadeOut(3000,()=>this.remove());
});
这样就无法删除了,this指向了window。请教是为什么??不应该是第一种方法中的this指向window吗??谢谢
函数中的this是在函数被调用时生成的,是传递给函数的一个隐式变量,指向函数的上下文。所以this的指向跟函数的调用方法有关,当函数作为对象的方法调用时,this指向的是这个方法的对象。
$("#son").fandOut()中,回调函数是fandOut方法的处理程序,$("#son")对象调用了这个方法,所以回调函数中this就指向$("#son");
在ES6语法规定箭头函数不再绑定this,所以箭头函数中this始终指向window。