Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:作为单个变量传递多个参数_Javascript_Argument Passing - Fatal编程技术网

Javascript:作为单个变量传递多个参数

Javascript:作为单个变量传递多个参数,javascript,argument-passing,Javascript,Argument Passing,是否可以使用单个变量传递多个参数?例如,如果我想做以下事情: function foo(x,y){ document.write("X is " + x); document.write("Y is " + y); } var bar = "0,10"; foo(bar); 上面的例子是我试图做的一个简化的例子。它不起作用(因为“bar”被检测为单个参数)。我知道有更简单的方法可以使用数组来实现这一点 所以,我问这个问题主要是出于好奇——是否有可能让“bar”变量被检测为不是

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

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

var bar = "0,10";
foo(bar);
上面的例子是我试图做的一个简化的例子。它不起作用(因为“bar”被检测为单个参数)。我知道有更简单的方法可以使用数组来实现这一点

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

谢谢

您可以使用:

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

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

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

否,但可以传递数组或对象:

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

var bar = {x: 0, y:10};
不是真的

你可以做:

window.foo.apply(window, bar.split(','));
(应用允许传递参数数组,而不是单独传递每个参数)


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

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

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

基本上,函数接受变量作为参数,并且,无论传递哪种类型的变量,每个变量仍然只是一个变量-无法将单个变量识别为多个参数。数组是一个变量,JSON对象是一个变量,等等。这些东西有多个部分,但它们由一个变量封装。

当然,传递对象以获取选项是很常见的

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

要直接回答您的问题,不可以。值得注意的是,您定义的
bar
只是一个值,一个包含“0,10”的字符串

可变长度参数列表:

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);
函数添加(){
var总和=0;
for(var i=0;i
参考:

或者


是字符串的拆分很难看,也可以使用
窗口引用
foo
。foo
很难看。但是,不允许使用
函数.apply
!相关主题:关键字'arguments'告诉您传递给函数的参数。例如:函数a(){alert(arguments[1])};a(1,2);这将发出警报(“2”);不过,这使用了2个参数,而不是OP要求的1个参数。当您没有真正有用的代码时,请进行注释。
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);
function myFunction(a,b){
//do stuff with a and b here
}

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