zoukankan      html  css  js  c++  java
  • 闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别

    闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别

    函数最常见的形式是具名函数(named function):

    function foo(){ 
        console.log("named function")
    }
    foo()
    

    不过也可以将函数视作数据赋值给变量,这样的函数可以没有名字:

    nameless = function(){
        console.log("anonymouse function")
    }
    
    nameless()
    

    上面的function(){...}就是匿名函数(anonymous function),这个匿名函数也叫做lambda表达式,即lambda表达式就是匿名函数。

    而闭包(closure)是作用域在一个环境内闭合的函数,举个例子:

    function outer(){ 
        var a = 10; 
        function inner(){
            console.log(a);
        };
        return inner;
    }
    outer()()
    

    这里的inner函数作用域位于outer函数作用域(环境/上下文)内,即闭合于outer环境,这个inner就是闭包。闭包可以具名也可以匿名,上面是具名的形式,可能在很多编程语言无法实现,也可以使用下面的匿名形式:

    function outer(){ 
        var a = 10; 
        return function inner(){
            console.log(a);
        };
    }
    outer()()
    

    所以两个是不相同但是相关的概念,总结来说:

    • lambda是没有名字的函数,等价于匿名函数
    • 闭包是作用域闭合于外部函数环境的函数
  • 相关阅读:
    闲扯 Javascript 01 实现选项卡
    控制台获得键盘事件
    C#反射 入门学习 02
    C#反射 入门学习 01
    闲扯 Javascript 00
    读张子阳老师的委托和事件 2
    浅析ado.net获取数据库元数据信息 DeriveParameters
    SQLBulkCopy使用
    利用CryptoStream进行加密解密
    vs 中代码的字体也颜色设置
  • 原文地址:https://www.cnblogs.com/ysherlock/p/10331551.html
Copyright © 2011-2022 走看看