2016-02-27 92 views
0

我發現這段代碼在JavaScript的依賴注入實現中使用:使用arguments對象,而不是參數

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) { ... } ...有什麼區別?

回答

0

一個區別:

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

但我認爲這更多的是與arguments[1] || {}這是需要使用默認值兼容。

+0

*「這是使用默認值所必需的」* - 不,它不是。爲什麼會這樣? – nnnnnn

+0

好吧,你可以重新分配,但那通常被認爲是不好的代碼風格 – Lux

+0

我會說在函數聲明中使用參數而不是命名參數是(通常)更糟的代碼風格... –

相關問題