7

是否可以使用单个变量传递多个参数?例如,如果我想做类似的事情:

function foo(x,y){
    document.write("X is " + x);
    document.write("Y is " + y);
}

var bar = "0,10";
foo(bar);

上面的示例是我尝试做的一个简化示例。它不起作用(因为“条”被检测为单个参数)。我知道有更简单的方法可以使用数组来实现这一点。

所以,我问这个问题主要是出于好奇——是否有可能将“bar”变量检测为不是一个,而是两个参数?

谢谢!

4

10 回答 10

14
function foo(thing) {
    document.write("X is " + thing.x);
    document.write("Y is " + thing.y);
}

var bar = {x:0, y:10};
foo(bar);
于 2010-08-12T19:39:23.200 回答
4
function Add (a, b, c) {
    return a + b + c;
}

var nums = [1, 2, 4];
var sum = Add.apply (null, nums);

变长参数列表:

function Add () {
    var sum = 0;
    for (var i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}
var n = Add (1, 2, 3, 4, 5);

参考:apply方法(函数对象)

于 2010-08-12T20:02:10.630 回答
4

你要求的是不可能的。如果要在单个参数中传递多个值,请使用 anArray或 an Object。如果您确实必须使用字符串,则必须调用split()将参数字符串分解为数组。

于 2010-08-12T19:39:29.343 回答
1

并不真地。

你可以这样做:

window.foo.apply(window, bar.split(','));

(Apply 可以让你传递一个参数数组,而不是单独传递每个参数)

……但我想到了“丑陋”这个词。

于 2010-08-12T19:40:15.010 回答
1

当然,传递一个对象作为选项是很常见的

function foo(options){
  //...
}

然后你可以传入任何东西......

var opts = {};//create an object
opts['x'] = 5;//set whatever properties you want
opts['y'] = 23;
opts['border'] = 3;
foo(opts);//pass 1 argument, with as many values as you want

通常这些是内联定义的,尤其是在方法调用之外不需要这些值的情况下。

foo({'x':5,'y':23,'border':3});
于 2010-08-12T19:40:49.207 回答
0

你可以使用这个:

var bar = [0,10]; // creates an array
foo(bar);

function foo(arg){
    document.write("X is " + arg[0]);
    document.write("Y is " + arg[1]);
}
于 2010-08-12T19:39:11.313 回答
0

不,但你可以传递一个数组或对象:

function foo(options){
    document.write("X is " + options.x);
    document.write("Y is " + options.y);
}

var bar = {x: 0, y:10};
于 2010-08-12T19:39:39.687 回答
0

不,这是不可能的。您可以将两个参数放在一个数组中,但数组仍然是一个变量。然后您需要重写函数以接受一个变量,并将其视为一个数组,如下所示:

function foo(x){
document.write("X is " + x[0]);
document.write("Y is " + x[1]);
}

基本上,一个函数接受变量作为参数,无论你传递什么样的变量,每个变量仍然只是一个变量——没有办法让一个变量被识别为多个参数。数组是一个变量,JSON 对象是一个变量,等等。这些东西有多个部分,但它们被一个变量封装。

于 2010-08-12T19:40:45.877 回答
-1

直接回答你的问题,不。值得注意的是,您bar定义它的方式只有一个值,一个包含“0,10”的字符串。

于 2010-08-12T19:41:54.117 回答
-2
function myFunction(a,b){
//do stuff with a and b here
}

myFunction(1,'text')

或者...

<a onClick="myFunction(1,'text');"

这里有一篇关于这个问题的文章。

于 2013-03-28T13:23:15.960 回答