Var foo = (function(){..})();.. Foo()不起作用
var foo = (function(){...})(); ... foo() doesn't work
如预期的那样,它第一次调用函数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);}();
(注意末尾的 ()
) ?——你不想那样))
它不起作用,因为您将调用匿名函数的结果赋值给foo
,而不是函数本身。
当您尝试调用foo()
时,您试图将第一个函数调用的结果(显然是DOMWindow
类型)视为函数,这是不正确的。
你可以使用
var foo;
(foo = function(){...})();
但是这不是很好读
应该是
<>之前Var foo = function() {.....}之前代替
<>之前Var foo = (function() {..}) ();之前在你的例子中,你正在给foo分配一个匿名函数
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Meteor-添加用户自定义字段的方法不起作用
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- document.getElementById('foo').src='' 不起作用
- Var foo = (function(){..})();.. Foo()不起作用
- ExpressJS >路由器中间件>通过重定向传递变量 req.foo 不起作用