猿问

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

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

我读了一些关于闭包的文章,到处都看到了这种情况,但是没有明确的解释-每次我被告知要使用它时…:

// 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');

为什么要排在同一条线上?

你能告诉我一些帖子或者解释一下吗?


偶然的你
浏览 328回答 3
3回答

慕莱坞森

有一件事让我感到困惑,那就是“()”是分组操作符。这是您的基本声明函数。前。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
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答