美文网首页
匿名函数、闭包(closure)、lambda异同

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

作者: 李昂的数字之旅 | 来源:发表于2018-06-10 22:04 被阅读0次

    匿名函数

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

    //正常函数调用,先定义再调用
    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异同

          本文链接:https://www.haomeiwen.com/subject/njbqeftx.html