为了账号安全,请及时绑定邮箱和手机立即绑定

为什么需要在同一行上调用匿名函数?

为什么需要在同一行上调用匿名函数?

偶然的你 2019-06-14 10:48:39
为什么需要在同一行上调用匿名函数?我读了一些关于闭包的文章,到处都看到了这种情况,但是没有明确的解释-每次我被告知要使用它时…:// Create a new anonymous function, to use as a wrapper(function(){     // The variable that would, normally, be global     var msg = "Thanks for visiting!";     // Binding a new function to a global object     window.onunload = function(){         // Which uses the 'hidden' variable         alert( msg );     };// Close off the anonymous function and execute it})();好的,我看到我们将创建新的匿名函数,然后执行它。因此,在此之后,这个简单的代码应该可以工作(而且它确实起作用):(function (msg){alert(msg)})('SO');我的问题是这里会发生什么魔法?当我写到:(function (msg){alert(msg)})然后将创建一个新的未命名函数,如函数“(Msg).但是为什么这个不起作用呢?(function (msg){alert(msg)});('SO');为什么要排在同一条线上?你能告诉我一些帖子或者解释一下吗?
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

有一件事让我感到困惑,那就是“()”是分组操作符。

这是您的基本声明函数。

前。1:

var message = 'SO';function foo(msg) {
    alert(msg);}foo(message);

函数是对象,可以分组。所以让我们在函数周围抛出父母。

前。2:

var message = 'SO';function foo(msg) {  //declares foo
    alert(msg);}(foo)(message);     // calls foo

现在,我们可以使用基本替换来像我们所称的那样声明它,而不是声明和正确调用相同的函数。

前。3.

var message = 'SO';(function foo(msg) {
    alert(msg);})(message);          // declares & calls foo

最后,我们不需要额外的foo,因为我们没有使用名称来调用它!函数可以是匿名的。

前。4.

var message = 'SO';(function (msg) {   // remove unnecessary reference to foo
    alert(msg);})(message);

要回答你的问题,请参考示例2。您的第一行声明了一些无名函数并对其进行了分组,但没有调用它。第二行对字符串进行分组。两个人都什么都不做。(文森特的第一个例子)

(function (msg){alert(msg)});  ('SO');                       // nothing.(foo); (msg); //Still nothing.

(foo)(msg); //works


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信