function animator(shapes, $timeout) {
(function tick() {
var i;
var now = new Date().getTime();
var maxX = 600;
var maxY = 600;
var now = new Date().getTime();
$timeout(tick, 30);
})(); // What is this for?
}
这里我不了解功能。我是这种剧本的新手。主函数内部就像()()。这是为了什么?
答案 0 :(得分:7)
这是一个IIFE,立即调用的函数表达式。
为什么?:IIFE从全局范围中删除变量。这有帮助 防止变量和函数声明的生存时间超过 预计在全球范围内,这也有助于避免变数 碰撞。
为什么?:当您的代码缩小并捆绑到单个文件中时 部署到生产服务器,您可能会发生冲突 变量和许多全局变量。 IIFE保护您免受两者的伤害 通过为每个文件提供变量范围来实现这些目的。
答案 1 :(得分:3)
我不知道它是否有一个单独的名称,它只是立即执行。
而不是function a(){..}; a()
,您可以(function(){..})()
用于确定内部变量的范围,同时将其放置/执行到您想要的位置,您也不必为其创建名称。
答案 2 :(得分:2)
(function(){console.log('test')})()
会立即调用函数。因此,如果您将编写此语句,则会立即调用它并在控制台上打印测试。
答案 3 :(得分:1)
这是一个自我调用函数,正如@lix指出的那样。
函数表达式可以“自我调用”。
自动调用(启动)自调用表达式,而不会被调用。
如果表达式后跟()。
,函数表达式将自动执行