闭包作用域
1.创建函数
- 开辟一个堆内存
- 把函数体中的代码,当做字符串存储进去
- 把堆内存的地址赋值给函数名/变量名
- 函数在哪里创建的,那么它执行的时候所需要查找的上级作用域就是谁
2.函数执行
- 形成一个全新的私有作用域,执行上下文,私有栈内存(执行一次形成一个,多个之间也不会有影响)
- 形参赋值 & 变量提升
- 代码执行(把所属堆内存中的代码字符串拿出来一行行执行)
- 遇到一个变量,首先看它是否为私有变量(形参和在私有作用域中声明的变量是私有变量),是私有的操作自己的变量即可,不是私有的则向上级作用域中查找,一直找到全局作用域为止 = > 作用域链查找机制
- 私有变量和外界的变量没有必然关系,可以理解为被私有栈内存保护起来了,这种机制其实就是闭包的保护机制
var i =5;
function fn(i){
return function (n){
console.log(n +(++i));
}
}
var f = fn(1);
f(2);
f(3)(4);
fn(5)fn(6);
fn(7);
console.