我有一个问题,现在已经让我烦恼了一段时间。
我们说我有以下数组:
var array = [1, 2, 3]
现在我有一个类似的功能:
function print(num, str) {
console.log(str + ": " + num);
}
是否可以调用forEach方法并将字符串传递给它?
// how do I pass "str"?
array.forEach(print);
谢谢!
答案 0 :(得分:4)
这里有两个选项:
要么交换参数,要先str
。然后,您可以使用function.bind
绑定函数的第一个参数:
function print(str, num) {
console.log(str + ": " + num);
}
array.forEach(print.bind(null, 'someStr'));
或者,您也可以创建一个新的(匿名)函数,它只是将一些值传递给第二个参数:
array.forEach(function (item) { print(item, 'someStr'); });
使用ES6和箭头功能,这甚至会更漂亮:
array.forEach(item => print(item, 'someStr'));
两种解决方案都具有非常相似的效果,因为它们创建了一个新的函数对象,然后传递给forEach
。对你更有意义的取决于你的用例。
就像一个注释:你只需要记住传递给forEach
的回调实际上最多需要三个参数(项目,项目的索引和数组本身),所以当你通过时要小心一个接受其他附加参数的函数。您可以再次使用本地函数来解决此问题。
答案 1 :(得分:2)
不是在这种特殊情况下。这里简单的解决方案是使用匿名函数包装器:
array.forEach(function (i) { print(i, str); });
如果您将参数反转为print
,您可以更优雅地执行此操作:
function print(str, num) { .. };
array.forEach(print.bind(null, str));
str
将绑定为第一个参数,forEach
在调用回调时传递的任何参数都在第二个,第三个等位置传递。
答案 2 :(得分:1)
你去吧
var array = [1, 2, 3];
function print(str, num) {
console.log(str + ": " + num);
}
var str = 'someString';
array.forEach(print.bind(null, str));