参数expect函数的默认值

时间:2015-10-18 22:04:25

标签: javascript optional-parameters

我想为函数参数expect添加默认值以接收函数。

请看以下示例:

/** 
* @param {function} callback
* @param {String} name
*/
function example(callback, name){
    console.log('Hello' + name + 'from parent function');
    callback();
}


// implementation
example(null, "Mickey");

我想将callback作为可选参数。

2 个答案:

答案 0 :(得分:0)

在JavaScript中,您通常会测试参数是null还是undefined并提供默认值。更简洁的是,您可以使用||

callback = callback || (some default value);

使用||更加宽松,因为它也会对待任何有关" falsy"在JavaScript中缺少,包括false,空字符串和零。因此它对可选的布尔参数没用。

在您的情况下,您的默认值是一个函数:

function example(opt_callback, name) {
  var callback = opt_callback || function() {};
  console.log('Hello' + name + 'from parent function');
  callback();
}

此处默认函数不提供任何内容,但您可以在此处向默认函数添加一些默认行为。

使用opt_命名可选参数是Google JavaScript Style GuideGoogle Closure Compiler推荐的做法。我认为它使代码更具可读性,但也许我已经习惯了它。

除非有其他重要的可读性原因,否则最好在参数列表的末尾添加可选参数,例如:

function example(name, opt_callback) {
  ...

这样调用者可以只用一个参数简洁地调用你的函数,例如example('Mickey'),因为JavaScript中未指定参数的默认值是undefined

答案 1 :(得分:-1)

由于函数具有typeof“function”,因此您可以进行简单的typeof检查。虽然JavaScript函数是一流的,但您实际上并不需要进行太多改动。

/** 
* @param {function} callback
* @param {String} name
*/
function example(callback, name){
    if (typeof a !== "function") {
      callback = function(){ }; // replace this with your default function
    }
    console.log('Hello' + name + 'from parent function');
    callback();
}

如需更深入的解答,请参阅受保护的答案here

编辑:顺便说一下,最好将可选回调作为第二个参数。这样您就不必显式传递null来获取默认值。

function example(name, callback) { ... }

example("hello"); // callback has value null

example("hello", function(){...}); // also valid