javascript:将动态值作为参数返回

时间:2011-07-19 10:11:42

标签: javascript function javascript-events arguments

如何将动态参数传递给函数,例如

var customvar = 1; //example

  function iLike(){

      console.log("you like ... (i know how to recieve the arguments!)")
  }

  function getDrink(){

       return (customvar == 1 ? ('pepsi','cola') : ('drpepper'));
  }

  iLike('peanuts', 'pizza', getDrink());

  iLike('peanuts', 'pizza', 'pepsi', 'cola'); // = result

如何正确传递来自getDrink()的参数 - 我只接受'cola'而不是'pepsi'。

谢谢你:)

4 个答案:

答案 0 :(得分:3)

如果要发送动态数量的参数,请使用apply函数:

getDrink.apply(this, ['pepsi', 'cola']);
getDrink.apply(this, ['pepsi', 'cola', '7up']);

您还可以使用call功能:

getDrink.call(this, 'pepsi', 'cola');
getDrink.call(this, 'pepsi', 'cola', '7up');

如果要访问函数中的所有参数,可以使用arguments数组

function getDrink() {
var first = arguments[0]; //pepsi
var secon = arguments[1]; //cola
}

答案 1 :(得分:1)

如果您希望getDrink返回包含'pepsi''cola'的数组,则语法为['pepsi', 'cola']

我不太确定这是不是你想要的......

请注意,这仍然会给你:

iLike('peanuts', 'pizza', ['pepsi', 'cola'])

三个参数,其中最后一个是数组,而不是四个参数。

如果你想用四个字符串参数调用iLike,你可能想要这样调用它:

function getDrink(){
    return (customvar == 1 ? ['pepsi','cola'] : ['drpepper']);
}

iLike.apply(this, ['peanuts', 'pizza'].concat(getDrinks()))

答案 2 :(得分:1)

您可以使用arguments对象:

function iLike(){
   var args = Array.prototype.slice.call(arguments); //convert to real array
   console.log('I like '+args[0]+', '+args[1]+' and '+args[2]);
}

如果你想从getDrink返回'pepsi'以及'cola'(在1变量中),你可以使用数组:

function getDrink(){
       return (customvar == 1 ? ['pepsi','cola'] : 'drpepper');
}

答案 3 :(得分:1)

解决方案是使用数组,并使用apply

var customvar = 0;    

function iLike() {
    console.log(arguments);
}

function getDrink() {
    return (customvar == 1 ? ["pepsi", "cola"] : ["drpepper"]);
}

iLike.apply(this, ["peanuts", "pizza"].concat(getDrink()));
// ["peanuts", "pizza", "drpepper"]