Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用arguments对象而不是参数_Javascript_Dependency Injection_Arguments - Fatal编程技术网

Javascript 使用arguments对象而不是参数

Javascript 使用arguments对象而不是参数,javascript,dependency-injection,arguments,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] |

我在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);
  }        
}
解析:函数(){ var func,deps,scope,args=[],self=this; func=参数[0]; deps=func.toString().match(/^function\s*[^\(]*\(\s*([^\)]*)/m)[1]。替换(//g',)。拆分(','); 范围=参数[1]|{}; 返回函数(){ var a=Array.prototype.slice.call(参数,0); 对于(var i=0;i存在差异:

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

但是我认为更应该与
参数[1]|{}
兼容,这是使用默认值所必需的。

“这是使用默认值所必需的”-不,不是。为什么会这样?您可以重新分配,但这通常被认为是错误的代码样式。我想说的是,在函数声明中使用参数而不是命名参数(通常)更糟糕的代码风格…好吧,这个区别非常明显。我问的是,在函数的执行过程中是否有一些不同的实际beahvior…没有,所以谢谢。