参数 expect 函数的默认值

Default value for parameter expect function

我想为期望接收函数的函数参数添加默认值。

看下面的例子:

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


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

我想将 callback 作为可选参数。

因为一个函数有一个 typeof "function",你可以做一个简单的 typeof 检查。虽然 JavaScript 函数是 first-class,所以你真的不需要做太多改变。

/** 
* @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

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

callback = callback || (some default value);

使用 || 更宽松,因为它还会将 JavaScript 中的任何 "falsy" 视为缺失,包括 false、一个空字符串和零。所以它对可选的布尔参数没有用。

在你的例子中,你的默认值是一个函数:

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

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

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

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

function example(name, opt_callback) {
  ...

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