如果我想,如何稍后调用JS自执行函数?

时间:2011-04-24 23:45:24

标签: javascript jquery

我正在尝试编写一个立即执行的函数,但也可以稍后执行:

var test = function (e){ console.log('hello'+e); }();
$('#some_element').click(function(e){
    test(' world');
});

在这种情况下,我想要的结果是:

helloundefined
hello world

我没有理解为什么稍后调用test会返回'test is not a function'。

4 个答案:

答案 0 :(得分:5)

您可以像这样定义test

var test = function (e){ console.log('hello'+e); }();

这会创建一个闭包,然后立即调用它。由于闭包中没有明确的return,因此返回undefined。现在test包含undefined。之后,在传递给click的闭包中,它尝试调用testtest仍为undefined。你最终会做这样的事情:

undefined(' world');

你说你希望它输出:

helloundefined
hello world

在这种情况下,你可以这样做:

var test = function test(e) { console.log('hello'+e); return test; }();

作为一个副作用,它也使test可链接,所以你可以这样做:

test(" world")(" stack overflow")(" internet");

结果(不包括第一个helloundefined)将是:

hello world
hello stack overflow
hello internet

答案 1 :(得分:4)

var test = function (e){ console.log('hello'+e); }();

最后那些parens意味着test是评估函数调用的结果(换句话说是函数的返回值),而不是函数本身。

试试这个:

var testFunc = function (e){ console.log('hello'+e); };
testFunc();
$('#some_element').click(function(e){
    testFunc(' world');
});

答案 2 :(得分:3)

var test;
(test = function( e ) { console.log('hello'+e); } )(); //helloundefined

test( ' world' ); //hello world

答案 3 :(得分:1)

您要将函数的返回值分配给test,而不是函数本身。如果您还想将其分配给变量,我认为您不能使用自执行快捷方式。你需要这样做:

var test = function (e){ console.log('hello'+e); };
test();
$('#some_element').click(function(e){
    test(' world');
});