我有一个函数将另一个函数作为参数:
功能调用
openDialog('warning',removeRowAction(id));
openDialog功能
function openDialog(type, action){
if(type == 'warning'){
action();
}else{
console.log(type);
}
}
removeRowAction功能
function removeRowAction(row){
$('#row_'+row).remove();
}
不幸的是removeRowAction(id)
被称为immediatley,无论{I}有type
,甚至在if
之前。
我想做什么甚至可能?
答案 0 :(得分:2)
问题是,当您将removeRowAction
传递给openDialog
时,您正在致电function removeRowAction(row){
return function() {
$('#row_'+row).remove();
}
}
openDialog('warning',removeRowAction(id));
。你想要一个返回函数的函数,如下所示:
id
这样,您就可以在代码中的任何位置使用任何MyList
。
答案 1 :(得分:1)
您没有将函数传递给openDialog,而是传递removeRowAction(id)的返回值。
您可以传递这样的函数:
openDialog('warning',function(){removeRowAction(id)});
答案 2 :(得分:0)
openDialog( 'warning' , id );
function openDialog ( type , id ) {
type == 'warning' ?
removeRowAction( id ) :
console.log( type ) ;
}
function removeRowAction ( row ) {
$( '#row_' + row ).remove();
}
答案 3 :(得分:0)
嗯,有几种选择:
使用创建新功能的Function.prototype.bind():
bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值,并在调用新函数时提供任何前面提供的给定参数序列。
openDialog('warning',removeRowAction.bind(null, id));
将函数传递给openDialog
方法:
//ES5 syntax
openDialog('warning', function() {
removeRowAction(id)
});
//ES2015 syntax
openDialog('warning', () => removeRowAction(id));
您也可以使用闭包原理。所以你的函数removeRowAction
将返回一个函数,这个函数可以访问行变量:
//ES5
function removeRowAction(row){
return function() {
$('#row_'+row).remove();
}
}
//ES2015
function removeRowAction2(row){
return () => $(`#row_${row}`).remove();
}
//same call with removeRowAction2
openDialog('warning', removeRowAction(id));