我想调用自我调用功能,但它似乎不工作,因为你可以看到下面的代码我能够警告(测试),但不是当它被另一个函数调用时。请指教 - 谢谢你无法调用自我调用功能
var test = (function(a,b){
return a*b;
})(4,5);
function myFunc() {};
alert(test); // working
alert(test.call(myFunc, 10,5)); // not working
我想调用自我调用功能,但它似乎不工作,因为你可以看到下面的代码我能够警告(测试),但不是当它被另一个函数调用时。请指教 - 谢谢你无法调用自我调用功能
var test = (function(a,b){
return a*b;
})(4,5);
function myFunc() {};
alert(test); // working
alert(test.call(myFunc, 10,5)); // not working
立即调用函数是在加载脚本时执行的函数。在你的榜样,功能旁边的测试立即执行,并返回20
值我有一种感觉,你真正想要的是这样的:
var test = (function()
{
var a = 4,
b = 5;
return function()
{
return a*b;
}
}());
所以在我如上所述,测试不会设置为20.相反,它将设置为一个函数,将a
乘以b
并返回20.为什么?因为当我立即调用函数时,它不会返回实际值;它会返回另一个函数,然后该函数返回我试图计算的实际值。
感谢Kinsho对此进行调查,我认为您正在使用闭包来简化我之后的工作。其实我更想理解.call()并试图调用自调函数,但我认为这不是正确的方法,因为它立即计算函数的结果并将其分配给变量Test。 (a,b){ \t return a * b; }; function myFunc(){} alert(test(2,10)); alert(test.call(myFunc,10,5)) – user1336103
您在0线评估功能,并分配返回值“20”至test
。由于20是一个数字,而不是函数,所以不能称之为函数。尝试改为:
var test = function(a,b){
return a*b;
};
alert(test(4,5));
alert(test(10,5));
谢谢jsha - 我明白了你的观点。你能否给我一个通过另一个函数调用自调函数的例子代码,或者这是不可能的。 – user1336103
当函数立即被调用并返回一个基于硬编码参数的数字时,您希望如何调用**自调用**函数? 'test'包含数字20,因为它立即被调用。你有没有理由在这里使用自我调用功能? – Ian
'test'不是一个函数,因此它没有'call'方法。 – Yoshi