我想为函数参数expect添加默认值以接收函数。
请看以下示例:
/**
* @param {function} callback
* @param {String} name
*/
function example(callback, name){
console.log('Hello' + name + 'from parent function');
callback();
}
// implementation
example(null, "Mickey");
我想将callback
作为可选参数。
答案 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 Guide和Google 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