JavaScript风格:可选的callback
我有一些函数,我会想ocacionally运行一个callback,但不是总是检查callback是否定义/函数一个很好的风格,还是有更好的方法?
例:
function save (callback){ .....do stuff...... if(typeof callback !== 'undefined'){ callback(); }; };
我个人比较喜欢
typeof callback === 'function' && callback();
typeof
命令是狡猾的,只能用于"undefined"
和"function"
typeof !== undefined
是用户可能传入一个已定义的值而不是函数
你也可以这样做:
var noop = function(){}; // do nothing. function save (callback){ callback = callback || noop; .....do stuff...... };
如果你碰巧在几个地方使用callback
,这是特别有用的。
另外,如果你使用jQuery
,你已经有了一个这样的函数,它叫做$ .noop
简单地做
if (callback) callback();
如果提供的话,我更喜欢调用callback,不pipe它是什么types的。 不要让它失败,所以执行者知道他通过了一个不正确的论点,可以修复它。
如果运行callback的标准是无论是否定义,那么你很好。 另外,我build议检查一下它是否真的是一个函数。
我厌倦了一遍又一遍地看到同样的片段,我写了这个:
var cb = function(g) { if (g) { var args = Array.prototype.slice.call(arguments); args.shift(); g.apply(null, args); } };
我有数百个function在做类似的事情
cb(callback, { error : null }, [0, 3, 5], true);
pipe他呢…
我对整个“确定它的function”策略持怀疑态度。 唯一合法的价值是function或虚伪。 如果有人传入非零数字或非空string,你打算怎么做? 忽视问题如何解决呢?
我已经转到咖啡脚本,发现默认参数是解决这个问题的好方法
doSomething = (arg1, arg2, callback = ()->)-> callback()
ArgueJS可以轻易做到这一点 :
function save (){ arguments = __({callback: [Function]}) .....do stuff...... if(arguments.callback){ callback(); }; };
一个有效的函数基于函数原型,使用:
if (callback instanceof Function)
确定callback是一个函数