參考資料,並強烈推薦:最詳盡的 JS 原型與原型鏈終極詳解,沒有「可能是」
知乎專欄:如何才能通俗易懂的解釋javascript裏面的‘閉包’?
原型:
所有對象的 _ proto _ 都指向其構造器的 prototype
var Person = {
name: '',
abc: function (){
}
}
var person1 = new Person()
person1._proto_ === Person.prototype
Person.__proto__ === Function.prototype
Function.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null // true
閉包:
把函數當類用,說是閉包,其實也可以叫封裝
閉包:在爺爺的環境中執行了爸爸,爸爸中返回了孫子,本來爸爸被執行完了,爸爸的環境應該被清除掉,但是孫子引用了爸爸的環境,導致爸爸釋放不了。
這一坨就是閉包。
簡單來講,閉包就是一個引用了父環境的對象,並且從父環境中返回到更高層的環境中的一個對象。
function foo() {
var a = 2;
return function bar() {
console.log(a)
}
}
var baz = foo();
baz(); //2