function foo(){ setTimeout(()=>{ console.log("is:",this.id);//42 },100)}var id = 21;foo.call({id:42})js中函数的this是动态的,要看运行时是谁调用的,在这里面foo内部的this指向匿名对象setTimeout是全局调用的箭头函数没有this 指向相邻的外层 即为setTimeout的this 所以为什么不是21 打印结果为什么是42???求大神详细解释?
4 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
<input type="button" value="点击" id="btn">
<script>
document.getElementById('btn').onclick = function () {
/*var _this = this;
setTimeout(function(){
// 内部的this 默认指向window
_this.value = '哈哈';
}, 1000);*/
// 箭头函数中的this, 永远指向它所在作用域中的this
// 会捕获其所在上下文的 this 值,作为自己的 this 值
setTimeout(() => {
this.value = '哈哈';
}, 1000);
}
</script>
添加回答
举报
0/150
提交
取消