【问题标题】:Javascript: passing multiple arguments as a single variableJavascript:将多个参数作为单个变量传递
【发布时间】:2011-03-29 03:10:27
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

  • 相关主题:关键字'arguments'告诉你参数传递给函数。例如:函数 a(){alert(arguments[1])};一(1, 2);这将 alert('2');

标签: javascript argument-passing


【解决方案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});

【讨论】:

    【解决方案2】:
    function myFunction(a,b){
    //do stuff with a and b here
    }
    
    myFunction(1,'text')
    

    或者...

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

    here这个问题上有一篇文章。

    【讨论】:

    • 那使用 2 个参数,而不是 OP 要求的 1 个。
    【解决方案3】:
    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 method (Function object)

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 如果您没有真正有用的代码,请发表评论。
      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

        不是真的。

        你可以这样做:

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

        (Apply 允许您传递参数数组,而不是单独传递每个参数)

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

        【讨论】:

        • 是的,字符串的拆分很丑陋,使用window.foo 引用foo 也很丑陋。但是function.apply的使用不是!
        【解决方案7】:

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

        function foo(options){
            document.write("X is " + options.x);
            document.write("Y is " + options.y);
        }
        
        var bar = {x: 0, y:10};
        

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:
            function foo(thing) {
                document.write("X is " + thing.x);
                document.write("Y is " + thing.y);
            }
            
            var bar = {x:0, y:10};
            foo(bar);
            

            【讨论】:

              【解决方案10】:

              你可以使用这个:

              var bar = [0,10]; // creates an array
              foo(bar);
              
              function foo(arg){
                  document.write("X is " + arg[0]);
                  document.write("Y is " + arg[1]);
              }
              

              【讨论】:

                猜你喜欢
                • 2019-06-10
                • 1970-01-01
                • 2015-12-26
                • 2018-02-26
                • 2011-01-10
                • 2019-07-04
                • 1970-01-01
                • 2021-09-21
                相关资源
                最近更新 更多