if (typeof args == 'function') {
cb = args;
args = {};
}
什么意思?
这段代码的目的是重载函数参数(参数归一化),提供更灵活的 API 调用方式。
具体来说,在 bridge.call(method, args, cb) 这个方法定义中,正常期望传入三个参数(方法名、参数对象、回调函数)。但为了让前端在调用时不那么啰嗦,加入了这段判断。
它的意思是:
如果你在调用时,第二个参数 args 并没有传一个对象,而是直接传了一个函数 (function),那么系统就认为你没有要传给原生的参数,你只是想传一个回调函数。
因此代码执行:
-
cb = args;:把你传在第二个位置的函数,赋值给正确的回调变量cb。 -
args = {};:把原本因为占位传错的args重置为空对象,防止后续代码处理参数时报错。
举个实际调用的例子:
原本严格的调用方式(必须传空对象):
// 获取设备信息,不需要传参数,只需要回调
bridge.call('getDeviceInfo', {}, function(res) {
console.log(res);
});
有了这段代码后,你可以简写成这样(省略空对象,非常方便):
// 直接把回调函数写在第二个参数的位置
bridge.call('getDeviceInfo', function(res) {
console.log(res);
});
这种“参数前移/重载”的设计模式在现代 JavaScript 库(如 jQuery、Node.js 核心库)中非常常见,目的是为了提升开发者的使用体验。