参考资料,并强烈推荐:最详尽的 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