【问题标题】:What's the differences between t.onclick = doSomething and t.onclick = doSomething() in javascript? [duplicate]javascript 中的 t.onclick = do Something 和 t.onclick = do Something() 有什么区别? [复制]
【发布时间】:2012-02-20 12:57:47
【问题描述】:

可能重复:
javascript syntax: function calls and using parenthesis

 t.onclick = doSomething 

 t.onclick = doSomething()

两个事件注册有什么不同?

有时我会混淆它们,添加括号似乎不会造成大问题?

【问题讨论】:

    标签: javascript events event-handling


    【解决方案1】:

    第一个将doSomething 的引用分配给onclick 属性。第二个分配doSomething返回值。这不太可能是您想要的,除非doSomething 返回一个函数。

    分配参考:

    function doSomething() {
        console.log("something");
    }
    //When t is clicked, "something" is logged
    t.onclick = doSomething;
    

    赋值返回值:

    function doSomething() {
        console.log("something");
    }
    //"something" is logged immediately. When clicked, nothing happens
    t.onclick = doSomething();
    

    分配一个返回的函数:

    function doSomething() {
        return function() {
            console.log("something");
        };
    }
    //When t is clicked, "something" is logged
    t.onclick = doSomething();
    

    【讨论】:

    • 所以doSomething() 最好命名为returnSomethingNowWhichWillDoSomethingThen() ;-)
    【解决方案2】:

    引用对象的方式在 JS 中意义重大。 doSomething;doSomething(); 之间存在差异,因为前者是引用函数,后者是引用函数的 return value。让我们看看这个例子,你就会明白我的意思。 doSomething();不仅调用函数,还返回函数的return value

    function doSomething() {
        return 5;
    }
    
    console.log(doSomething); // function() { return 5; }
    
    console.log(doSomething()); // 5
    

    所以t.onclick = doSomething; 很像t.onclick = function() { return 5; };

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多