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