javascript - js call的一个问题,很简单的代码,输出结果如何解释?
本文介绍了javascript - js call的一个问题,很简单的代码,输出结果如何解释?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
foo2()采用了箭头函数。
按照对call的理解,foo.call({id:23})应该输出23,而不是0。所以,谁能解释一下吗?
代码如下:
<script type="text/javascript">
function foo() {
setTimeout(function (){
console.log('id1:', this.id);
}, 100);
}
function foo2() {
setTimeout(() => {
console.log('id2:', this.id);
}, 100);
}
var id = 0;
foo.call({id:23});
foo2.call({id: 2});
</script>
执行结果:
0
2
解决方案
很明显,第一个this指向的是window,而第二个箭头函数this指向当前对象,也就是说谁调用,就指向谁;
第一个可以改下解决下:
function foo() {
var _this = this;
setTimeout(function (){
console.log('id1:', _this.id);
}, 100);
}
var id = 0;
foo.call({id:23});
这篇关于javascript - js call的一个问题,很简单的代码,输出结果如何解释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文