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

时间:2010-08-27 09:53:33

标签: javascript jquery function

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

$(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('<div id="icis_dialog_msg" />'); 

            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 }

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

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

干杯,

:)

6 个答案:

答案 0 :(得分:31)

您可以使用关键字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。 Here's an edited version of the plugin to demonstrate this

答案 1 :(得分:8)

使用参数变量。

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]); 

答案 2 :(得分:7)

答案 3 :(得分:3)

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

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");

答案 4 :(得分:1)

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

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]);

答案 5 :(得分:0)

在最近的时间里,您现在可以使用或传播和休息操作员在此处详细说明 - Pass unknown number of arguments into javascript function