奇怪的语法:调用带有两个括号对的javascript函数

时间:2013-12-20 09:45:05

标签: javascript angularjs

我目前正在阅读一本关于AngularJS的书,我对我不理解的javascript语法有疑问。

var element = $compile('<button></button>')($rootScope);

为什么一个人可以调用带有两个括号对的函数?

  1. ('<button></button>')
  2. ($rootScope)
  3. 任何人都可以建议这个js构造吗?

3 个答案:

答案 0 :(得分:4)

它不是一个特殊的构造,它只是一个返回函数的函数。

function a () {
    return function () {
        console.log("hello");
    };
}

a()();

AngularJS $compile接受一些HTML字符串并返回一个模板函数,而该函数又可以被调用。

你的代码片段用两行写成,如下所示:

var template = $compile('<button></button>');
var element = template($rootScope);

答案 1 :(得分:2)

$compile('<button></button>')返回一个由第二组括号立即执行的函数。

答案 2 :(得分:1)

$compile('<button></button>')调用一个函数。它返回一些东西。 ($rootScope)应用于返回值(可能是另一个函数)。

举个简单的例子:

function one() {
    return two;
}

function two() {
    alert("Hello");
}

one()();