Javascript 将函数数组作为参数传递
这是我的密码:Javascript 将函数数组作为参数传递,javascript,jquery,Javascript,Jquery,这是我的密码: function test(e, f) { for (var i = 0; i < e.length; i++) { $('#clickme').append("<button id='op" + i + "'>" + e[i] + "</button>") $('#op' + i).click(function () { f[i](); }) } } $(f
function test(e, f) {
for (var i = 0; i < e.length; i++) {
$('#clickme').append("<button id='op" + i + "'>" + e[i] + "</button>")
$('#op' + i).click(function () {
f[i]();
})
}
}
$(function postPunk() {
var func1 = function () {
alert('1');
}
var func2 = function () {
alert('2');
}
var func3 = function () {
alert('3');
}
test(['Option1', 'Option2', 'Option3'], [func1, func2, func3]);
})
功能测试(e,f){
对于(变量i=0;i
单击事件没有调用函数。如果我在click事件中放置了一个警报测试,它将正常启动
你知道为什么这样不行吗?将函数数组作为参数传递似乎有问题。有更好的方法吗?与其他此类问题一样,
i
不断变化
相反,请尝试以下方法:
for( var i=0; i<e.length; i++) {
(function(i) {
// your code that depends on i not changing
})(i);
}
for(var i=0;i这似乎是经典的JavaScript问题,它们都是最后一个值(或者未定义的,因为f[3]
不存在),因为这是循环后i
的值
尝试将函数引用直接传递给单击
处理程序
function test(e, f) {
for (var i = 0; i < e.length; i++) {
$('#clickme').append("<button id='op" + i + "'>" + e[i] + "</button>")
$('#op' + i).click(f[i])
}
}
回调函数中的代码在循环结束后使用i
的值,因此它指向数组外的索引。循环中需要一个闭包,以便每次迭代都获得自己的变量实例:
function test(e, f) {
for (var i = 0; i < e.length; i++) {
$('#clickme').append("<button id='op" + i + "'>" + e[i] + "</button>");
(function(i){
$('#op' + i).click(function () {
f[i]();
});
})(i);
}
}
功能测试(e,f){
对于(变量i=0;i
以下是我如何让它工作的:
功能测试(e,f){
对于(变量i=0;i
不知道;
在javascript中是可选的。您在第6行和最后一行缺少它们。您正在控制台中查看它吗?有一个错误:TypeError:[3]不是函数“f”+[i]();
检查上述问题。这可能会对您有所帮助。还有更多的“缺少”;
(每个函数表达式)。它们是“可选的”,但最好不要忽略它们。@在JavaScript中的大多数地方,显式分号都是可选的(对于已经用每行一条语句干净地编写的代码)。这不会导致上述代码出现任何问题。请查找“ASI”(自动分号插入)对于规则。我在JavaScript中几乎不写分号;了解规则并保持一致。@JaredFarrish没有,因为f
不会像I
那样改变。+1用于将函数直接传递到。单击。如果不需要I
,这是唯一明智的解决方案。
function test(e, f) {
for (var i = 0; i < e.length; i++) {
$('#clickme').append("<button id='op" + i + "'>" + e[i] + "</button>");
(function(i){
$('#op' + i).click(function () {
f[i]();
});
})(i);
}
}
function test(e, f){
for(var i = 0; i < e.length; i++) {
(function(i) {
$('#clickme').append("<button id='op" + i + "'>" + e[i] + "</button>");
$('#op' + i).click(function(){
f[i]();
});
})(i);
}
}