闭包(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表达式就是匿名函数。less

而闭包(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()()

因此两个是不相同可是相关的概念,总结来讲:code

  • lambda是没有名字的函数,等价于匿名函数
  • 闭包是做用域闭合于外部函数环境的函数
相关文章
相关标签/搜索