为什么onscroll在此函数中没有括号的情况下工作?

时间:2017-02-28 13:09:28

标签: javascript html onscroll

我在调用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上的链接:http://codepen.io/marcoangelo/pen/KWdWem

任何有助于理解Javascript为什么会这样做的帮助都会很棒。

1 个答案:

答案 0 :(得分:2)

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

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

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