Javascript 为什么onscroll在此函数中不带括号就可以工作?
我在调用windowScroll函数时做了3个函数。为什么它不使用额外的括号,而是在它自己的函数内或不使用括号时工作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
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(这个)的情况下也能工作,但事实并非如此。