函数最多见的形式是具名函数(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