将多个/未知数量的变量传递给JavasScript参数?

时间:2019-02-11 07:19:06

标签: javascript function methods parameters arguments

我正在创建一个具有多个/未知数量的变量和一个回调的可重用函数。

//the number of variable will be dynamic
var a = "this is a.";
var b = "this is b.";

function callback(){
 console.log('callback successful');
}

//totalUp() will be reusable function
function totalUp(allVariables, callback){
 console.log('Here are the complete list: ' + allVariables + '.');
 callback();
}

//how do I pass unknown number of arguments(a and b) into one parameter?
totalUp({a,b},callback);

在上面的代码中,我以无效的对象形式传递了a和b。

3 个答案:

答案 0 :(得分:1)

使用ES6

您可以对其进行参数解构:

function test(callback, ...params) {
    console.log(params); // ["a", "b"];
    console.log('Here are the complete list: ' + params.join(", ") + '.');
}

test(callback, "a", "b");

没有ES6

function test(params, callback) {
    console.log(params); // ["a", "b"];
    console.log('Here are the complete list: ' + params.join(", ") + '.');
}

test(["a", "b"], callback);

答案 1 :(得分:1)

let allVars = [
    "this is a.",
    "this is b.",
]

您可以在allVars中插入更多变量,因此变量数量未知。

将其传递给函数时,有2个选项。

第一个是传递数组并将其用作数组

function totalUp(allVars, callback){
  let allVariables;
  for (let i = 0; i<allVars.length; i++) {
      allVariables += allVars[i] + ", ";
  }
  console.log('Here are the complete list: ' + allVariables + '.');
  callback();
}

正如Marvin所提到的,您还可以使用.join()在一个字符串中获取数组中的所有变量。

function totalUp(allVars, callback){
  let allVariables = allVars.join(", ");
  console.log('Here are the complete list: ' + allVariables + '.');
  callback();
}

第二个是将其作为对象传递

let allVars = {
    a: "this is a.",
    b: "this is b."
}

答案 2 :(得分:0)

我将改变管道的特性,首先将必要的回调作为第一个参数,然后将动态参数作为参数。

function upTo(cb, ...params) {
    cb(...params);
}

function cb(...params) {
    params.forEach(v => console.log(v));
}

upTo(cb, 1, 2, 3);

ES5

function upTo(cb) {
    cb.apply(null, Array.prototype.slice.call(arguments, 1));
}

function cb() {
    Array.prototype.slice.call(arguments).forEach(function (v) { console.log(v); });
}

upTo(cb, 1, 2, 3);