将事件处理程序分配给带括号和不带括号的方法之间的区别

时间:2013-12-31 08:10:29

标签: javascript function event-handling

假设你有以下内容:

function doStuff() { //code }

两个陈述之间有什么区别?

window.onload = doStuff;

window.onload = doStuff();

两个语句都立即调用了该方法,但如果我使用了第一个语句,我可以将onload视为指向“doStuff”的函数指针,并使用以下方法再次调用该方法:

onload();

这是唯一的区别,一般来说,这是事件处理程序的所有保证行为吗?

3 个答案:

答案 0 :(得分:3)

window.onload = doStuff();

当iterpreter到达那里时,它会立即触发。

window.onload = doStuff;

它是对未来被调用的函数的引用。

问题:

我应该何时使用window.onload = doStuff();

答案:

当你需要创建闭包时:

示例:

window.onload = doStuff();

哪里

function doStuff()
    {
        var i = 0;
        return function ()
        {
            return i++;
        };
    }

答案 1 :(得分:2)

window.onload = doStuff();

直接执行doStuff()并将函数的返回值赋给window.onload

window.onload = doStuff;

这将实际功能分配给window.onload。它分配它而不执行它。调用load事件时将执行doStuff。

答案 2 :(得分:1)

你实际上有点理解。

window.onload = doStuff;

表示当触发onload事件时,将调用doStuff函数。

window.onload = doStuff();

表示当达到该行代码时(触发onload事件之前),执行doStuff并将其返回结果分配给onload处理程序。

除非doStuff返回触发onload事件时要执行的函数,否则你可能想要第一个。