闭包:是一种机制,函数执行的时候会形成一个私有作用域,来保护里面的变量不受外界干扰,我们把这种机制叫做闭包,私有变量有两种:一种是参数,第二种是在私有作用域下也解释的变量
函数执行的步骤:
1.形成私有作用域 2.给形参赋值 3.预解释 4.函数体执行function fn(){var f=0;f++;console.log(f)}console.log(f);
全局:预解释:function fn=xxxfff000; 代码执行:f没有 所以报错了
var a=1;var b=2;function sum(a){ var b=10a++b++console.log(a,b)}//全局预解释:var a,b,function sum=xxxfff000//全局执行:a=1,b=2,sum(1)形成一个私有作用域//1.给参数赋值,a=1//2.私有作用域预解释:var b//3.b=10,a=2,b=11//全局中console.log(a,b);1,2
在私用作用域下遇到变量先看是不是自己的私有变量(两者),是的话就是私有的,不是的话就网上一级找,如果没有就继续找,直到找到全局下为止,还没找到就报错了,这种查找机制就叫做"作用域链",私有作用域下的私有变量外界访问不到,但是可以获取外界的"我的就是我的,你的也可以是我的"