This question already has answers here:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
(6个答案)
2年前关闭。
也许这是一个愚蠢的问题,但是有:
是否没有机会将a.scrolled的值从事件内部更改为“外部”上下文?
谢谢....
第一个
(6个答案)
2年前关闭。
也许这是一个愚蠢的问题,但是有:
var a = {
scrolled: false
};
var handler = function() {
a.scrolled = true;
console.log(a.scrolled); // always "true"
};
window.addEventListener('scroll', handler);
console.log(a.scrolled); // always "false"
是否没有机会将a.scrolled的值从事件内部更改为“外部”上下文?
谢谢....
最佳答案
您的处理程序在滚动时触发,在滚动之前,a.scrolled
是false
。但是,第11行的console.log(a.scrolled)
是在加载JS时运行的,而不是在您滚动鼠标后运行的,因此在脚本开始时将打印false
。
一旦开始滚动,第8行上的其他console.log(a.scrolled)
就会启动。
因此,您将在控制台中看到以下内容:
false
true
true
true
true
第一个
false
输出来自第11行,其余来自处理程序中的第8行。07-26 08:47