为什么 onscroll 在这个函数中没有括号就可以工作?

Why does onscroll work without parenthesis in this function?

我在调用windowScroll函数时做了3个函数。为什么它不能使用额外的括号,但在它自己的函数内或没有括号时可以工作?

var windowScroll = function() {
    var doesNotRun = function() {
        console.log('does not run');
    };
    var doesRun = function() {
        console.log('does run');
    };
    window.onscroll = doesNotRun();
    window.onscroll = doesRun;
    window.addEventListener('scroll', function(){
        doesRun();
    });
};
windowScroll();

这是 codepen 上的 link:http://codepen.io/marcoangelo/pen/KWdWem

如果能帮助理解 Javascript 这样做的原因,那就太好了。

您需要将函数对象分配给事件处理程序属性。

doesRundoesNotRun 是解析为函数对象的表达式。

doesRun()doesNotRun() 是(立即)调用这些函数并解析为调用它们时获得的 return 值的表达式。在这种情况下,由于函数没有 return 语句,即 undefined