匿名函数、闭包(closure)、lambda异同

匿名函数

定义:无需定义标识符(函数名)的函数或子程序(子程序由一个或多个代码块组成,函数是一种子程序)。

//正常函数调用,先定义再调用
function foo(x) {
    return x
}
foo(5); // 5

//匿名函数调用,使用时直接定义
(function (x) {
    return x
})(5) // 5

闭包

定义:闭包成为函数闭包,是引用了自由变量的函数。与匿名函数的区别在于,引用了自由变量,且变量与闭包声明周期一样。

const y = 1;
(function (x) {
    return x + y
})(5); // 6

lambda

定义:不同语言对匿名函数的称呼,如Java、Python
java只有lambda等于匿名函数,是一种语法糖,且lambda引用的变量必须是effectively final(可以不用什么为final,但是不能修改变量值)

public static void main(String[] args) {
    int x = 0;
    Arrays.asList(1, 2, 3).forEach(
            it -> {
                it += 1;
                x++; //编译不通过
            }
    );
}

总结


简单理解

- 普通函数 匿名函数 闭包 lambda
变量名 没有 没有 没有
自由变量 不引用 引用 引用 引用
变量可变 - 不可变 可变 不可变

你可能感兴趣的:(匿名函数、闭包(closure)、lambda异同)