我想编写一个类似于此的javascript函数...
f([["a"]], function(e){alert(e);});
// results in alert("a");
f([["a"], ["b"]], function(e1,e2){alert(e1 + ":" + e2);});
//results in alert("a:b");
f([["a", "b"], ["c"]], function(e1,e2){alert(e1 + ":" + e2);});
//results in alert("a:c");alert("b:c");
我可以想到循环的递归解决方案,但是如何向函数发送“未知”数量的变量?
答案 0 :(得分:3)
如果将所有参数放入数组(让我们称之为foo
),则可以使用fn
- 函数调用带有这些参数的函数apply
。
fn.apply(null, foo)
第一个参数(在这种情况下为null
)是您希望this
在被调用函数内的任何内容。 null
可能适合你。
答案 1 :(得分:2)
根据this page,您可以使用arguments
变量访问任何/所有参数:
function f() {
for( var i = 0; i < arguments.length; i++ ) {
//do something with arguments[i]
}
}
[编辑]
既然我明白你要做什么,这是一种(肮脏)的方式:
说真的,不要这样做。这太糟糕了。小狗会死。
function f(arr, fn) {
var s = "fn(";
for( var i = 0; i < arr.length; i++ ) {
//you can implement your recursive code here if you like; I'm just doing the base cases
s += arr[i];
if(i+1 < arr.length) {
s += ",";
}
}
s += ");";
eval(s);
}
以更清洁的方式:
function f(arr, fn) {
fn.apply(this, arr);
}
答案 2 :(得分:0)
在函数中,您可以使用变量arguments
来查看传递的内容。 IE
function blah() {
console.log(arguments);
}
blah(1, 2); // [1, 2]
blah([1, 2], [3]); // [[1,2], [3]]
blah(1, [2, 3], "string"); // [1, [2, 3], "string"]
答案 3 :(得分:0)
您可以使用函数中可用的arguments
伪数组来获取传入的参数,而无需明确声明它们(即,无论您是否为函数定义参数,您都可以访问传递的所有内容通过该函数中的arguments
隐式变量进入函数。)
答案 4 :(得分:0)