在Javascript中传递函数功能立即调用第二个函数

时间:2016-08-24 14:05:33

标签: javascript function parameters

我有一个函数将另一个函数作为参数:

功能调用

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之前。

我想做什么甚至可能?

4 个答案:

答案 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));