someFunction(abc)(d)的语法是什么意思?

时间:2014-07-07 10:16:36

标签: javascript

我如何解释此代码:

  var element = $compile('<p>{{total}}</p>')(scope);

取自https://docs.angularjs.org/api/ng/service/$compile

这是我第一次看到类似的内容:

var x = someFunction(abc)(d);

我不知道Javascript中彼此相邻的一组大括号是什么意思。

4 个答案:

答案 0 :(得分:5)

someFunction(abc)返回一个函数。 (d)立即调用返回的函数,并将参数d传递给它。

从概念上讲,someFunction(abc)可以定义为如下所示。这里,someFunction(abc)返回一个接受参数(d)的函数。它会提醒abc + d

的总和
function someFunction(abc) {
    return function (d) {
        alert(abc + d);
    };
}

var adder = someFunction(10);

adder(2); // 12
adder(3); // 13

// ... or
someFunction(10)(2); // 12
someFunction(10)(3); // 13

在这里做实验; http://jsfiddle.net/756g3/


在您的特定情况下,$compile('<p>{{total}}</p>')会返回模板函数。您立即调用该模板函数,将scope变量传递给它。

答案 1 :(得分:1)

它只是从someFunction

调用返回的(函数)参数d

答案 2 :(得分:1)

函数是一阶公民,即您可以像对待其他对象一样对待它们,将它们传递给其他函数并从其他函数返回它们。也许这会澄清?

var fn1 = function(a) {
    var fn2 = function(b) {
        return a+b;
    };
    return fn2;
};

现在

>> fn1(1)(2)
3
>> var bar = fn1(100)
>> bar(3)
103
>> bar(15)
115

fn1接受一个参数a并返回一个函数,它将一个传递的参数b添加到a。我的解释很糟糕,但我希望很清楚。

答案 3 :(得分:1)

function makeFunc() {
    return function (foo) {
        alert(foo);
    };
}

var func = makeFunc();
func('hello');

或者,简写:

makeFunc()('hello');

$compile返回一个函数,然后调用该函数。