如何在javascript中使用函数(1)(2)?它是如何工作的?

我理解调用函数(1)而不是函数(1)(2),它是如何工作的?

功能(1)(2)(3)(4)也可以吗?

解决方法

在这种情况下,假设函数(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一个特征 – 其中函数可以作为参数传递并作为其他函数的结果返回.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...