奇怪的语法:使用两组括号调用JavaScript函数

4

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

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

如何使用两组括号调用函数?

  1. ('<button></button>')
  2. ($rootScope)

请问有人能给出有关此js结构的建议吗?


1
如果$compile返回一个函数(这是完全合法的),那么当然可以调用该函数。 - dan-lee
谢谢!确实有道理! - balteo
3个回答

4

这并不是一个特殊的结构,只是一个返回函数的函数。

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

a()();

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

您的代码片段跨越两行,将如下所示:

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

2

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


1

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

举个简单的例子:

function one() {
    return two;
}

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

one()();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接