这种函数格式叫什么?

时间:2015-08-13 11:55:16

标签: javascript angularjs

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?
}

这里我不了解功能。我是这种剧本的新手。主函数内部就像()()。这是为了什么?

4 个答案:

答案 0 :(得分:7)

这是一个IIFE,立即调用的函数表达式。

Why use an IIFE?

  

为什么?:IIFE从全局范围中删除变量。这有帮助   防止变量和函数声明的生存时间超过   预计在全球范围内,这也有助于避免变数   碰撞。

     

为什么?:当您的代码缩小并捆绑到单个文件中时   部署到生产服务器,您可能会发生冲突   变量和许多全局变量。 IIFE保护您免受两者的伤害   通过为每个文件提供变量范围来实现这些目的。

答案 1 :(得分:3)

我不知道它是否有一个单独的名称,它只是立即执行。

而不是function a(){..}; a(),您可以(function(){..})()

用于确定内部变量的范围,同时将其放置/执行到您想要的位置,您也不必为其创建名称。

答案 2 :(得分:2)

(function(){console.log('test')})()会立即调用函数。因此,如果您将编写此语句,则会立即调用它并在控制台上打印测试。

答案 3 :(得分:1)

这是一个自我调用函数,正如@lix指出的那样。

  

函数表达式可以“自我调用”。

     

自动调用(启动)自调用表达式,而不会被调用。

     

如果表达式后跟()。

,函数表达式将自动执行