2011-04-29 53 views
1

我有一個嵌套函數中的參數對象的問題,似乎是arguments.length從父函數中獲取,而參數[0]從嵌套函數中獲取...任何人都可以解釋爲什麼會發生這種情況?將父foo的參數傳遞給bar的最有效方法是什麼?傳遞父函數參數嵌套函數?

$.fn.foo = function(color1, color2, time){ 
    return this.each(function bar(){ 

     for(var i = 0;i < (arguments.length - 1);i++){ 
      alert(arguments.length); //this is taken from foo function and returns 2 
     alert(arguments[i]); //this is taken from bar 

     } 
    }); 
    }; 
+0

出於好奇,是否有一個原因,你傳遞一個命名函數'bar'到每個函數中,而不是一個匿名的? – Zirak 2011-04-29 10:08:40

+2

@Zirak,大概是爲了明確問題,並能夠通過名稱來引用該功能。這實際上是一個好主意! – davin 2011-04-29 10:12:00

回答

3

簡單的解決方案:獲取當地參考arguments

$.fn.foo = function(color1, color2, time){ 
    var args = arguments; // Create a private reference 
    return this.each(function bar(){ 
     alert(args.length); //Use private reference 
    }); 
}; 
4

arguments總會(除非改變)具有當前正在執行的功能,而你的情況是bar的範圍。

閱讀了jQuery .eachdocs,該功能「原型」如下:

.each(function(index, Element))

所以當然arguments.length將返回2.無論你是否已命名的變量,以便對付那些2發送參數被另一個故事,但如果用2個參數調用該函數,參數對象將具有長度2。