实例中的指针仅指向原型,而不指向构造函数。 所有函数的默认原型都是 Object 的实例,因此默认原型都会包含一个内部指针 proto,指向 Object.prototype。
闭包需要几个条件:
- 闭包是在函数被调用执行的时候才被确认创建的。(但我个人认为,要视情况,有些复杂的情况,觉得是在预编译的时候就已经把这种关系确定下来)
- 闭包的形成,与作用域链的访问顺序有直接关系。
- 只有内部函数访问了上层作用域链中的变量对象时,才会形成闭包,因此,我们可以利用闭包来访问函数内部的变量。(这点就是第一点中提到的复杂情况)
用这个例子
function foo() {
var a = 10;
function fn1() { // 如果改成 function fn1(a) => 调用的时候传入参数,也不是闭包了
return a;
}
function fn2() {
return 10; //无访问上层作用域变量
}
fn2();
}
foo();