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是一个函数