【发布时间】:2016-03-04 12:01:06
【问题描述】:
我正在寻找一个问题的解决方案,我发现了这个 aswer https://stackoverflow.com/a/6962808/2724978
写的函数是:
(function loop() {
var rand = Math.round(Math.random() * (3000 - 500)) + 500;
setTimeout(function() {
doSomething();
loop();
}, rand);
}());
我的问题是,为什么函数内括号中的末尾也有 ()?这让我有点困惑,以前从未见过。
【问题讨论】:
-
因为函数没有被评估。
-
末尾的2括号是调用循环函数。括号中的块是一种特殊符号,用于将内部的所有内容设为私有(无法从外部访问)。
-
如果你输入
function loop() { ... };,那么定义函数。它还没有执行。调用函数是由()(这是参数列表)完成的,它实际上执行了函数。你在()前面加上一个名字,你会得到loop(),它告诉JS 引擎执行这个函数。 -
@Walfrat:parens 没有做任何事情来使里面的东西或多或少变得私密。
-
JavaScript IIFE的可能重复
标签: javascript scope