【问题标题】:JavaScript () following } [duplicate]JavaScript()跟随} [重复]
【发布时间】:2013-09-16 21:18:25
【问题描述】:

我正在学习 JavaScript,有时会看到类似的东西

function functionname()
{
   // Some statements
} () ;

} 后面的 () 是什么意思?

非常感谢 Stack Overflow 专家

【问题讨论】:

  • 在任何其他函数之后与()相同。
  • 嗯,目的可能是在答案讨论时立即调用该函数。但是,请注意,在这个 sn-p 中它是一个 SyntaxError。 function declaration 似乎不能紧跟()。但是,function expression 可以(因此 IIFE 中的FE)。这种区别就是为什么function 周围经常有另一组括号,这迫使它成为一个表达式。

标签: javascript


【解决方案1】:

这是一个 IIFE(立即调用的函数表达式)。它用于创建新范围。例如:

var x = 10;
(function() {
   var x = 5;
}());
alert(x); // still 10

它所做的只是同时定义和调用函数。


IIFE 也用于“保存”变量的值。例如,此代码将不起作用:

for (var i = 0; i < buttons.length; i ++) {
    buttons[i].onclick = function() { alert(i) }
}

每个按钮都会在您单击它时提醒最后一个索引,因为循环完成后ibuttons.length。要修复它,您可以使用 IIFE:

for (var i = 0; i < buttons.length; i ++) {
    buttons[i].onclick = (function(i) {
        return function() {
            alert(i)
        }
    })(i)
}

More info on IIFEs

【讨论】:

  • @TomislavMarkovski 谢谢,将其编辑到我的答案中
  • @Doorknob 我还有一个问题。使用这种功能有什么好处,因为它不可重用? (不能从其他地方调用)
  • @CanerAkdeniz 如果你只需要使用一次。
  • @Doorknob 那我为什么需要创建一个函数?我可以在不创建函数的情况下做到这一点。有什么性能优势吗?
【解决方案2】:

它调用函数。

var foo = function () { return 1; }();
alert(foo); // 1

【讨论】:

    【解决方案3】:

    有很多方法可以定义一个函数,当你这样做时......

    (function functionname(innerArguments){
       // Some statements;
    })(outerArguments);
    

    ... 一旦这段代码被解释,函数就会被执行; 它与:

    function functionname(innerArguments){
       // Some statements;
    };
    functionname(outerArguments);
    

    【讨论】:

    • 请注意,这些 sn-ps 实际上并不相同;第一个被解释为函数声明,然后是一个无用的表达式。您的第一个 sn-p 定义了函数但不执行它。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2023-04-10
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多