This question already has answers here:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
                            
                                (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.scrolledfalse。但是,第11行的console.log(a.scrolled)是在加载JS时运行的,而不是在您滚动鼠标后运行的,因此在脚本开始时将打印false

一旦开始滚动,第8行上的其他console.log(a.scrolled)就会启动。

因此,您将在控制台中看到以下内容:

false
true
true
true
true


第一个false输出来自第11行,其余来自处理程序中的第8行。

07-26 08:47