2013-01-21 68 views
0

我想调用自我调用功能,但它似乎不工作,因为你可以看到下面的代码我能够警告(测试),但不是当它被另一个函数调用时。请指教 - 谢谢你无法调用自我调用功能

var test = (function(a,b){ 
     return a*b; 
      })(4,5); 

function myFunc() {}; 

alert(test); // working 
alert(test.call(myFunc, 10,5)); // not working 
+0

当函数立即被调用并返回一个基于硬编码参数的数字时,您希望如何调用**自调用**函数? 'test'包含数字20,因为它立即被调用。你有没有理由在这里使用自我调用功能? – Ian

+3

'test'不是一个函数,因此它没有'call'方法。 – Yoshi

回答

0

立即调用函数是在加载脚本时执行的函数。在你的榜样,功能旁边的测试立即执行,并返回20

值我有一种感觉,你真正想要的是这样的:

var test = (function() 
{ 
    var a = 4, 
     b = 5; 

    return function() 
    { 
     return a*b; 
    } 
}()); 

所以在我如上所述,测试不会设置为20.相反,它将设置为一个函数,将a乘以b并返回20.为什么?因为当我立即调用函数时,它不会返回实际值;它会返回另一个函数,然后该函数返回我试图计算的实际值。

+0

感谢Kinsho对此进行调查,我认为您正在使用闭包来简化我之后的工作。其实我更想理解.call()并试图调用自调函数,但我认为这不是正确的方法,因为它立即计算函数的结果并将其分配给变量Test。 (a,b){ \t return a * b; }; function myFunc(){} alert(test(2,10)); alert(test.call(myFunc,10,5)) – user1336103

2

您在0线评估功能,并分配返回值“20”至test。由于20是一个数字,而不是函数,所以不能称之为函数。尝试改为:

var test = function(a,b){ 
    return a*b; 
}; 
alert(test(4,5)); 
alert(test(10,5)); 
+0

谢谢jsha - 我明白了你的观点。你能否给我一个通过另一个函数调用自调函数的例子代码,或者这是不可能的。 – user1336103