我在嵌套函数中遇到参数对象的问题,看起来像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 :(得分:4)
arguments
将始终(除非更改)具有当前正在执行的函数的范围,在您的情况下为bar
。
阅读jquery .each
docs,函数“prototype”如下:
.each( function(index, Element) )
当然arguments.length
将返回2.是否有命名变量来捕获这两个发送的参数是另一个故事,但如果使用2个参数调用该函数,则arguments对象的长度为2。 / p>
答案 1 :(得分: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
});
};