【问题标题】:JavaScript: Optional callback? [duplicate]JavaScript:可选回调? [复制]
【发布时间】:2012-08-30 07:14:44
【问题描述】:

我编写了一个函数,它有 3 个参数,其中一个是回调函数。 如何使回调成为可选参数,而无需在没有回调参数的情况下编写另一个函数?

function myFunction(arg1, arg2, callback){
    // do something

    // callback() if it has been passed
}

【问题讨论】:

    标签: javascript


    【解决方案1】:

    确保回调是一个函数,然后调用它。

    function myFunction(arg1, arg2, callback){
        // do something
    
        typeof callback == "function" && callback();
    }
    

    如果您想对调用它进行更多控制,请使用call()apply()bind()(无论哪种方式都能实现您的目标)。

    【讨论】:

    • 功能很好,但从文体的角度来看,我发现单行中的 typeof/invocation 很难看。更喜欢 Mythril 的回答风格。
    • 不,我只是不喜欢你把它写在一行上的方式。澄清一下, if (typeof callback == 'function') { callback(); },但格式正确。
    • @alex 难道你不想要这会出错吗?作为其他人界面的用户,我想知道我插入的值是否不是预期值,而只是忽略它。
    • @alex 当我想到一个可选回调时,我想到了一个函数,say('hello')say('hello', callback) 都可以工作。我仍然希望say('hello', 'world') 出错。否则我永远不会知道这不是函数所期望的。 if (cb) cb(); 更简单并且在回调类型错误时提供错误。如果您提供自己的自定义错误,typeof 会更有用,在您的情况下,您不是。
    • @mcmullins 啊,对,我明白你现在的意思了。我同意。但希望人们不要用不同的参数来推断函数的参数签名:)
    【解决方案2】:

    简单,在调用之前检查是否定义了回调。

    function myFunction(arg1, arg2, callback){
        // do something
    
        if (callback) {
            callback();
        }
    }
    

    【讨论】:

    • 如果他们传递一个不实现[[Call]]的对象会出错。
    • 强制错误是一种很好的方式,这样实现者就不会误以为他的回调实际上被接受了
    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2018-07-26
    • 2011-06-30
    • 2014-10-27
    • 1970-01-01
    • 2020-03-12
    • 2015-11-09
    相关资源
    最近更新 更多