关于javascript:参数expect函数的默认值

Default value for parameter expect function

本问题已经有最佳答案,请猛点这里访问。

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

请看以下示例:

1
2
3
4
5
6
7
8
9
10
11
12
/**
* @param {function} callback
* @param {String} name
*/

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


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

我想把callback作为可选参数。


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

1
callback = callback || (some default value);

使用||更为宽松,因为它还将把javascript中的任何"错误"都视为缺失,包括false、空字符串和零。因此,对于可选的布尔参数来说,它并不有用。

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

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

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

使用opt_命名可选参数是google javascript样式指南和google闭包编译器推荐的实践。我认为它使代码更可读,但也许我已经习惯了。

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

1
2
function example(name, opt_callback) {
  ...

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


由于函数的类型为"function",所以可以进行简单的类型检查。虽然JavaScript函数是一流的,所以您不需要做太多的更改。

1
2
3
4
5
6
7
8
9
10
11
/**
* @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();
}

有关更深入的答案,请参阅此处的受保护答案。

编辑:作为旁白,最好将可选回调设置为第二个参数。这样,您就不必显式地传递空值来获取默认值。

1
2
3
4
5
function example(name, callback) { ... }

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

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