【发布时间】:2021-08-25 01:18:02
【问题描述】:
var nav = document.querySelector('.nav'); // <nav class="nav">
var toggleNav = function () {
console.log(this); // <nav> element
setTimeout(function () {
console.log(this); // [object Window]
}, 1000);
};
在上面的示例代码中,为什么在第 3 行中当变量 nav 声明在 toggleNav 范围之外时的元素?谢谢
【问题讨论】:
-
这在 JS 中是一件很有趣的事情。看看这个帖子stackoverflow.com/questions/3127429/…
-
回调函数在没有上下文的情况下被调用。来自欺骗目标:使用箭头函数作为回调,或使用
function(){…}.bind(this) -
@SebastianSimon — 所有函数都在执行上下文中调用,不同之处在于函数的 this 设置取决于它的调用方式(以及使用箭头函数的词法)。 ;-)
-
@RobG 我知道……“上下文”这个词被过度使用了。它可能应该是“隐式
this-binding base reference”左右。 -
如果你想解决这个问题,你可以试试这个:
var toggleNav = () => { console.log(this); // <nav> element setTimeout(function () { console.log(this); // [object Window] }, 1000); };
标签: javascript scope this