使用arguments对象而不是参数

时间:2016-02-27 11:27:27

标签: javascript dependency-injection arguments

我发现这段代码用于javascript中的依赖注入实现:

resolve: function() {
  var func, deps, scope, args = [], self = this;
  func = arguments[0];
  deps = func.toString().match(/^function\s*[^\(]*\(\s*([^\)]*)\)/m)[1].replace(/ /g, '').split(',');
  scope = arguments[1] || {};
  return function() {
    var a = Array.prototype.slice.call(arguments, 0);
    for(var i=0; i<deps.length; i++) {
        var d = deps[i];
        args.push(self.dependencies[d] && d != '' ? self.dependencies[d] : a.shift());
    }
    func.apply(scope || {}, args);
  }        
}

我想知道为什么那个丑陋的func = arguments[0]在那里,因为我只用function(func) { ... }来写那个......有什么不同吗?

1 个答案:

答案 0 :(得分:0)

的区别:

function a(arg) { return arg; };
function b() { return arguments[0]; };
console.log(a.length); // 1
console.log(b.length); // 0

但我认为与使用默认值所必需的arguments[1] || {}兼容更多。