Javascript callback=callback | | function(){};

Javascript callback=callback | | function(){};,javascript,callback,Javascript,Callback,上面这行代码的目的是什么。我特别对“function(){}”感到困惑。为什么是空函数?为了给代码行增加一点上下文,下面是更完整的函数定义 this.detectQRCode = function(imageData, callback) { callback = callback || function() {}; client.decode(imageData, function(result) { if(result !== undefined) {

上面这行代码的目的是什么。我特别对“function(){}”感到困惑。为什么是空函数?为了给代码行增加一点上下文,下面是更完整的函数定义

this.detectQRCode = function(imageData, callback) {

     callback = callback || function() {};

     client.decode(imageData, function(result) {
       if(result !== undefined) {
         self.currentUrl = result;
       }
       callback(result);
     });
};
这只是一种“短路”编码方式。它正在检查以确保回调不是未定义的。如果未定义,则为其分配一个匿名函数,以便callback()代码不会失败

相当于

if(typeof(callback) == "undefined") callback = function(){};
这种方法的一个缺陷是,如果定义了回调,但它不是函数,那么对无法调用的对象使用
callback()
将导致错误。最好使用

if(toString.call(callback) != "[object Function]") callback = function(){};

这与(!callback)callback=function(){}相同。也就是说,它定义了回退值。这意味着如果存在回调函数,则执行该回调,或者只需执行exmpty函数而不执行任何操作……如果没有回调,则分配
function(){}
,以便以后执行
callback
时不会抛出错误