正如预期的那样,它第一次调用函数 foo,但是当我想再次使用该函数时,抛出以下错误:

Uncaught TypeError: Property 'foo' of object [object DOMWindow] is not a function 

目的是定义一个函数(必须立即调用,但也可以稍后调用)- 我是否必须改为编写以下内容:

function foo() {...} 
foo(); 
... // later on 
foo(); 

或者有更优雅的解决方案吗?

编辑:如果您不能将变量(即使它是匿名函数)用作函数,那么它的优势是什么?

(为什么

var foo = (function(){...})(); 
... // later on 
foo(); 

不工作?)

请您参考如下方法:

如果展开

var foo = (function(){...})(); 
foo(); 

你会得到这个:

function temp() { 
    ... 
} 
foo = temp(); 

如您所见,您正在调用临时函数(此处以粗体显示):var foo = (function(){...})();。这意味着 foo 没有被分配给函数对象,而是该函数调用的返回值。因此,除非临时函数返回一个函数(在这种情况下您可能需要考虑重构),否则存储在 foo 中的值将不可调用。

在 JavaScript 中,有两种方法来存储函数对象:

A) 传递函数而不调用它(即 foo = bar; 而不是 foo = bar())。

B) (如果需要传递参数) 传递包装在另一个函数中的函数调用(不调用包装函数)(即 foo = function {bar(param1, param2);}; 而不是 foo = function {bar(param1, param2);}(); (注意 () 最后?——你不想要那个))。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!