2017-09-22 43 views
0

(希望我已经得到了正确的术语...)的javascript:传递一个函数名称与IIFE

我的代码,大大简化:

function foo(parm1, fn){ 
    // do stuff with parm1, and then... 
    window[fn](); 
} 

function bar(){ 
    // do the other thing 
} 

然后被调用为:

foo('some string', 'bar'); 

我想用一个函数表达式,像这样(?):

foo('some string', function(){ // do the other thing }); 

,同时保留传递函数名称的选项,如第一个示例中所述,'bar'必须执行的步骤很多。我试过

function foo(parm1, fn){ 
    // do stuff with parm1, and then... 
    if(typeof fn != 'function'){ 
     window[fn](); 
    } else { 
     return true; 
    } 
} 

foo('some string', function(){ // but this never fires }); 

我可以两种方法吗?

+1

'函数foo(PARM1,FN){// 做PARM1东西,然后...... 如果(typeof运算FN == '功能' ){ window [fn](); } else { fn(); } } foo('some string',function(){console.log('function callback ...');});' – Ibro

+0

如果第二个参数是一个字符串但不是全局函数,你也可以检查'typeof window [fn] =='function'' – James

回答

1

您可以。你忘了打电话fn如果它是一个功能:

if(typeof fn != 'function'){ 
    window[fn](); 
} else { 
    fn(); // fn is (probably) a function so lets call it 
} 
+0

我会建议使用类型检查('!==')。 –

相关问题