我正在创建一个具有多个/未知数量的变量和一个回调的可重用函数。
//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。
答案 0 :(得分:1)
您可以对其进行参数解构:
function test(callback, ...params) {
console.log(params); // ["a", "b"];
console.log('Here are the complete list: ' + params.join(", ") + '.');
}
test(callback, "a", "b");
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);