Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么onscroll在此函数中不带括号就可以工作?_Javascript_Html_Onscroll - Fatal编程技术网

Javascript 为什么onscroll在此函数中不带括号就可以工作?

Javascript 为什么onscroll在此函数中不带括号就可以工作?,javascript,html,onscroll,Javascript,Html,Onscroll,我在调用windowScroll函数时做了3个函数。为什么它不使用额外的括号,而是在它自己的函数内或不使用括号时工作 var windowScroll = function() { var doesNotRun = function() { console.log('does not run'); }; var doesRun = function() { console.log('does run'); }; window

我在调用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上的链接:

了解Javascript为什么会这样做的任何帮助都将非常有用。

您需要为事件处理程序属性分配一个函数对象

doesRun
doesNotRun
是解析函数对象的表达式


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

在第一种情况下,您实际上调用了由bind创建的新函数,该函数没有return语句,因此您将window.onscroll设置为undefined。在严格模式下,这也将是未定义的(在这种情况下这并不重要,因为传递给函数的任何内容都不会被使用)。我不明白为什么大规模的向下投票是必要的,这是一个合法的问题。有点奇怪,但合法。并不是每个人都是编程专家,他们都希望得到回复。我意识到这不是一种装饰,丹尼斯,我试图理解为什么语言会这样。对我来说,我本以为doesNotRun函数应该在没有.bind(这个)的情况下也能工作,但事实并非如此。