Javascript 语法someFunction(abc)(d)是什么意思?
如何解释此代码:Javascript 语法someFunction(abc)(d)是什么意思?,javascript,Javascript,如何解释此代码: var element = $compile('<p>{{total}}</p>')(scope); 我不知道一组大括号在Javascript中是什么意思。someFunction(abc)返回一个函数。(d)立即调用返回的函数,并将参数d传递给它 从概念上讲,someFunction(abc)可以定义如下。这里,someFunction(abc)返回一个接受参数的函数(d)。它会提醒abc+d的总和 function someFunction(a
var element = $compile('<p>{{total}}</p>')(scope);
我不知道一组大括号在Javascript中是什么意思。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
在这里试验
在您的特定情况下,返回一个模板函数。您将立即调用该模板函数,并将
范围
变量传递给它。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
在这里试验
在您的特定情况下,返回一个模板函数。您立即调用该模板函数,将
范围变量传递给它。它只需调用从someFunction返回的(函数)上的参数d它只需调用从someFunction返回的(函数)上的参数d函数是一阶公民,也就是说,您可以像对待其他对象一样对待它们,将它们传递给其他函数,并从其他函数返回它们。也许这会澄清
var fn1 = function(a) {
var fn2 = function(b) {
return a+b;
};
return fn2;
};
现在
发生的情况是,fn1
接受一个参数a
,并返回一个函数,该函数将把传递的参数b
添加到a
。我的解释不好,但我希望它是清楚的。函数是一阶公民,也就是说,您可以像对待其他对象一样对待它们,将它们传递给其他函数,然后从其他函数返回它们。也许这会澄清
var fn1 = function(a) {
var fn2 = function(b) {
return a+b;
};
return fn2;
};
function makeFunc() {
return function (foo) {
alert(foo);
};
}
var func = makeFunc();
func('hello');
现在
发生的情况是,fn1
接受一个参数a
,并返回一个函数,该函数将把传递的参数b
添加到a
。我的解释不好,但我希望它是清楚的
function makeFunc() {
return function (foo) {
alert(foo);
};
}
var func = makeFunc();
func('hello');
或者,简写为:
makeFunc()('hello');
$compile
返回一个函数,然后调用该函数
或者,简写为:
makeFunc()('hello');
$compile
返回一个函数,然后调用该函数。可能重复@Ken这是一个完全不同的主题。。。!可能重复@Ken这是一个完全不同的主题。。。!因此,如果someFunction返回null,就会生成一个错误。不确定使用这种语法是否是一种好的做法。@AndroidDev:虽然从技术上讲是正确的,但通过执行var foo=someFunction(abc)并不能获得任何额外的安全性;傅(丁),代码>。您必须检查每个返回值是否都是一个函数<代码>变量foo=someFunction(abc);如果(typeof foo=='function'){foo(d);}
,这太过分了。@AndroidDev这个参数实际上是无效的,因为如果你不知道函数返回什么,那么你最终还是会出错的。您可以进行检查,但随后会编写大量不必要的代码IMHO(除非您事先知道函数可能返回null
,这是一种糟糕的做法IMHO:从一个函数返回不同类型的对象)。@freakish。如果它是第三方库,并且您不一定能保证非空值,我不会使用这种语法。@AndroidDev:这完全取决于具体情况。如果您知道函数总是返回一个函数(如$compile
),那么使用它就没有什么害处。正如我在前面的评论中所说,它直接替代了var foo=someFunction(abc);傅(丁),因此,如果某个函数返回null,就会生成一个错误。不确定使用这种语法是否是一种好的做法。@AndroidDev:虽然从技术上讲是正确的,但通过执行var foo=someFunction(abc)并不能获得任何额外的安全性;傅(丁),代码>。您必须检查每个返回值是否都是一个函数<代码>变量foo=someFunction(abc);如果(typeof foo=='function'){foo(d);}
,这太过分了。@AndroidDev这个参数实际上是无效的,因为如果你不知道函数返回什么,那么你最终还是会出错的。您可以进行检查,但随后会编写大量不必要的代码IMHO(除非您事先知道函数可能返回null
,这是一种糟糕的做法IMHO:从一个函数返回不同类型的对象)。@freakish。如果它是第三方库,并且您不一定能保证非空值,我不会使用这种语法。@AndroidDev:这完全取决于具体情况。如果您知道函数总是返回一个函数(如$compile
),那么使用它就没有什么害处。正如我在前面的评论中所说,它直接替代了var foo=someFunction(abc);傅(丁),代码>。