解决方法
在这种情况下,假设函数(1)返回一个函数,而不是调用参数为2的新的匿名函数.
看这个例子:
function sum(a) { return function(b) { return a+b; } } // Usage: window.alert(sum(5)(3)); // shows 8 var add2 = sum(2); window.alert(add2(5)); // shows 7 window.alert(typeof(add2)); // shows 'function'
这里我们创建一个函数sum,它接受一个参数.在函数sum中,我们创建了一个带有另一个参数的匿名函数.这个匿名函数作为执行sum的结果返回.
请注意,这个匿名函数是我们称之为closure的一个很好的例子.闭包是一个保持创建它的上下文的函数.在这种情况下,它将变量a的值保留在其中,示例函数add2也是如此.如果我们创建了许多闭包,它们是独立的,如您所见:
var add3 = sum(3); var add4 = sum(4); window.alert(add3(3)); // shows 6 window.alert(add4(3)); // shows 7
此外,如果您具有类似命名的局部变量,它们将不会“混淆”:
var a = "Hello,world"; function multiply(a) { return function(b) { return a * b; } } window.alert(multiply(6)(7)); // shows 42 var twoTimes = multiply(2); window.alert(typeof(twoTimes)); window.alert(twoTimes(5));
因此,在调用sum(2)或乘以(2)之后,结果不是数字,也不是字符串,而是函数.这是functional languages的一个特征 – 其中函数可以作为参数传递并作为其他函数的结果返回.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。