功能前左括号

时间:2013-09-26 14:30:47

标签: javascript html5

我对Javascript有一些经验,但我想知道为什么在函数关键字之前有左括号:

 requestAnimFrame = (function(callback) {
    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
    function(callback) {
      window.setTimeout(callback, 1000 / 60);
    };
  })();

你也能解释为什么有2个回调函数。还有一件事,为什么在最后一行代码中没有任何东西的括号?

3 个答案:

答案 0 :(得分:2)

这是一个自我调用的匿名函数:

(function() {
  // code in here
})();

使用此声明,您可以确保一旦声明该功能,它就会被执行。

答案 1 :(得分:2)

在函数定义之前有一个左括号,因为整个函数被包装在括号中,以便可以立即调用它。注意这个结构:

(function () {})();

这定义了一个(空)函数,然后通过应用第二组括号立即执行该函数。

没有两个回调函数。这个函数的目的似乎是返回另一个函数。理解在JavaScript中,函数是一个对象。它可以像任何其他变量一样传递。这是在寻找这样一个变量并将其返回。

这基本上可以理解为:

If `window.requestAnimationFrame` exists, return it.
Else, if `window.webkitRequestAnimationFrame` exists, return it.
Else, if ... and so on
Else, if none of them exist, return this custom function (the one that calls `setTimeout`)

它返回的任何函数都存储在requestAnimFrame变量中。

最后,最后一行的括号不是不匹配的。它是外部功能的结束括号。那个正在回归内功能的人。

答案 2 :(得分:1)

您看到的模式(在函数前使用括号,在结尾使用空对)称为Immediately-invoked function expression(或IIFE)

(function() {
  // ....
})();

它立即运行该功能,而不是等待它被调用。