【问题标题】:Callback function - use of parentheses回调函数 - 括号的使用
【发布时间】:2011-09-29 04:34:03
【问题描述】:

我是 jQuery 新手,对使用(或不使用)带有回调函数的括号感到有些困惑。假设我有一个函数:

function cb() {
 // do something
}

现在有什么区别:

$("p").hide(1000, cb);

$("p").hide(1000, cb());

何时执行cb函数有关吗?如果有人能用最简单的术语向我解释这一点,那就太好了。

【问题讨论】:

  • 建议:把这个复制到控制台看看区别:function cb(){ return 42;}; console.log(cb); console.log(cb());
  • 这是 JavaScript 的一个函数。它不仅限于 jQuery。
  • 确实,值得一提。 jQuery 是一个(函数$.hide 来自它)。但是,像这样的基本语法规则是由 Javascript 语言制定的。因此,除了其周围的上下文之外,这个问题实际上与 jQuery 几乎没有关系。
  • 谢谢,我试过了,cb() 返回一个值 42,正如 Tomalak 所说,它作为参数传递给 .hide()。那么没有括号的 cb 怎么办 - 42 会发生什么?

标签: javascript jquery


【解决方案1】:

cb() 表示给我执行函数cb的结果。

cb 是函数 cb,或者更准确地说是指向它的指针(引用)。

【讨论】:

  • 感谢(也感谢所有回答的人)。我想我理解 cb() 但是对于 cb 在什么情况下我想引用它?
  • @Edwin - 使用您的隐藏示例,您通常会定义一个内联函数,但如果您有一个预定义的函数,您可以像显示的那样引用它 - 没有括号......跨度>
【解决方案2】:

和cb函数的执行时间有关吗?

基本上,是的,尽管差异确实比这更深。

  • cb 是对该函数的各种引用。您将函数作为参数传递,以便在后面的某处调用。

  • cb()是一个函数调用;该函数将被调用,并将结果作为参数传递给.hide

【讨论】:

    【解决方案3】:

    $("p").hide(1000, cb);cb 引用的函数作为回调传递。

    $("p").hide(1000, cb()); 传递调用函数cb 时返回的值。

    给定:

    function cb(){ return true; }
    

    前者正在传递回调以供以后调用。后者传递返回值true,本质上就是$("p").hide(1000, true);

    【讨论】:

    • “传递函数cb()(作为回调)” ()(在函数名之后)在这里令人困惑。
    【解决方案4】:

    不同之处在于,在 javascript 中,函数是第一类对象,可以传递给其他函数,以便它们可以在稍后阶段或根据某些逻辑执行。

    考虑以下几点:

    function add(a, b) {
        return a + b;
    }
    
    function minus(a, b) {
        return a - b;
    }
    
    function apply(func, a, b) {
        return func(a,b);
    }
    
    apply(add, 3, 4); // returns 7
    apply(minus, 3, 4); // returns -1
    
    apply(add(), 3, 4); // error: invalid number of arguments for add
    
    apply(add(0,0), 3, 4); // error: add returns 0, but 0 is not a function and 
    // so apply crashes when it tried to call zero as a function
    

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多