是否可以使用单个变量传递多个参数?例如,如果我想做类似的事情:
function foo(x,y){
document.write("X is " + x);
document.write("Y is " + y);
}
var bar = "0,10";
foo(bar);
以上示例是我尝试做的简化示例。它不起作用(因为“bar”被检测为单个参数)。我知道有更简单的方法可以使用数组来实现它。
所以,我主要是出于好奇而问这个问题 - 是否有可能将“bar”变量检测为不是一个,而是两个参数?
谢谢!
答案 0 :(得分:12)
function foo(thing) {
document.write("X is " + thing.x);
document.write("Y is " + thing.y);
}
var bar = {x:0, y:10};
foo(bar);
答案 1 :(得分:4)
你所要求的是不可能的。如果要在单个参数中传递多个值,请使用Array
或Object
。如果您确实必须使用字符串,则必须调用split()
将参数字符串分解为数组。
答案 2 :(得分: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);
答案 3 :(得分:1)
不是。
你可以这样做:
window.foo.apply(window, bar.split(','));
(Apply允许您分别传递一个参数数组而不是每个参数)
...但脑海中浮现出“丑陋”这句话。
答案 4 :(得分: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});
答案 5 :(得分: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]);
}
答案 6 :(得分:0)
不,但你可以传递一个数组或对象:
function foo(options){
document.write("X is " + options.x);
document.write("Y is " + options.y);
}
var bar = {x: 0, y:10};
答案 7 :(得分:0)
不,这是不可能的。您可以在数组中放入两个参数,但数组仍然是一个变量。然后你需要重写函数来接受一个变量,并将其视为一个数组,如下所示:
function foo(x){
document.write("X is " + x[0]);
document.write("Y is " + x[1]);
}
基本上,函数接受变量作为参数,无论传递什么类型的变量,每个变量仍然只是一个变量 - 没有办法让单个变量被识别为多个参数。数组是一个变量,JSON对象是一个变量,等等。这些东西有多个部分,但是它们被一个变量封装。
答案 8 :(得分:-1)
直接回答你的问题,没有。值得注意的是,bar
定义它的方式只有一个值,一个包含“0,10”的字符串。
答案 9 :(得分:-2)
function myFunction(a,b){
//do stuff with a and b here
}
myFunction(1,'text')
...或
<a onClick="myFunction(1,'text');"
有一篇关于这个问题的文章here。