为什么这个javascript函数在括号内?

时间:2016-03-04 12:01:07

标签: javascript scope

我正在寻找问题的解决方案,我发现了这个问题https://stackoverflow.com/a/6962808/2724978

编写的函数是:

(function loop() {
    var rand = Math.round(Math.random() * (3000 - 500)) + 500;
    setTimeout(function() {
            doSomething();
            loop();  
    }, rand);
}());

我的问题是,为什么函数insite括号在最后还有()?它让我有点困惑,以前从未见过。

2 个答案:

答案 0 :(得分:3)

这是Immediately Invoked Function Expression的一个例子。

上面的链接将解释您需要知道的所有内容,但实际上有两件事情正在发生。

  • 在括号内包装告诉解析器将其中的所有内容视为表达式。
  • 之后立即调用表达式(带())可确保表达式的密封范围。

答案 1 :(得分:1)

该代码段会创建一个匿名函数,并立即调用它。

没有parens的问题,

// This is a syntax error
function () {
  something;
}();

是语法错误;因为语句以' function'开头,解析器需要跟随一个函数名。将它全部包含在parens中使得在那里定义匿名函数在语法上是合法的。

// This is valid syntax
(function () {
  something;
}());