允许javascript函数接受任意数量的参数

我希望下面的函数更灵活,并接受多个回调到其他函数,如果它们在参数中定义。

$(function() { function icisDashBox(colorElem, thisWidth, thisHeight, completeCallBack) { $(colorElem).colorbox({ transition: 'none', innerWidth: thisWidth, innerHeight: thisHeight, opacity: '0.5', onOpen: function() { }, onLoad: function() { }, onComplete:function() { $('#cboxLoadedContent').wrap('
'); completeCallBack(); }, onCleanup: function() { }, onClosed: function() { $('#cboxLoadedContent').unwrap(); } }); } icisDashBox('.example9', '500', '500', completeFunction); function completeFunction() { var fooClass = $("#colorbox").addClass("FOO"); var barClass = $("#colorbox").addClass("BAR"); var ajaxCnt = $.ajax({ type: "GET", url: "http://www.payso.me.uk", dataType: "html", success: function(data) { $("#colorbox").addClass("AJAX SUCCESS"); } }); return { x : fooClass, y : barClass, z : ajaxCnt }; }

所以在理想的世界中,我的函数看起来像这样,没有明确声明任何参数:

 function icisDashBox() { function code here } 

这可能吗? 此外,如果参数未定义,我该如何处理?

例如,如果对函数的一次调用定义了几个回调,而另一个只有一个回调,则有一种方法可以处理缺少回调的问题。

干杯,

🙂

您可以使用关键字arguments ,它是传递的参数的数组,如下所示:

 function myFunc() { if(arguments.length > 0) //be sure to check if there are any... var arg1 = arguments[0]; } 

但是 ,更好的方法是接受一个对象,例如:

 function myFunc(settings) { settings = settings || {}; //in case it was called as just: myfunc() var something = settings.something || "default value"; } 

你这样称呼它:

 myFunc({ something: "value", somethingElse: "otherValue" }); 

这种方法允许你接受任意数量的参数,但也有任何可选的,没有一堆myFunc(null, null, null, "value")类型调用只提供你想要的参数,而且它们被命名使这个更加可维护的IMO。 这是该插件的编辑版本,用于演示此内容 。

使用参数变量。

 function TestMe() { var args = arguments; for (var a in args) { alert(args[a]); } } 

现在您可以将任意数量的参数传递给TestMe函数:

 TestMe(1); TestMe(1,2,3); TestMe(1,2,3,4,5,6); TestMe.apply(this, [1,2,3,4,5]); 

等等

只需遍历arguments对象: https : //developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/Arguments

是的,这是可能的,这是一个例子:

 function myfunct() { var arguments = myfunct.arguments; for (var i = 0; i < arguments.length; i++) { alert("Argument " + i + " value = " + arguments[i]); } } 

您可以通过任意数量的参数调用此函数:

 myfunct("foo"); myfunct("foo","bar"); 

在最近的时间你现在可以使用或传播和rest运算符在这里详细说明 – 将未知数量的参数传递给javascript函数

感谢传播操作员现在你可以做这样的事情

 function myFunction(...params) { console.log(...params); } myFunction('Many arguments', 1, {two: 3}, ["four", 5]); // to access one by one function oneByOne(...params) { params.map(param => { console.log(param); }); } oneByOne('Many arguments', 1, {two: 3}, ["four", 5]);