众所周知,在javascript中,函数外的变量不能直接访问函数内的变量,如:varc=20;函数fn(){变量a=1;变量b=2;控制台日志(一);在这里你可以打印和访问这个局部变量;控制台日志(c);这里可以打印访问外面的全局变量c,***所以先检查函数中有没有局部变量c,没有的话就会按照作用域链去找外面的变量,所以就找到了全局变量c并且可以访问***}fn()ok接下来我们可以看看下面这个函数是否访问了函数内部的变量functionfn(){varb=3;}fn()console.log(b);这里打印不出来,因为当前环境是全局环境,所以全局不能直接访问函数内部的变量,所以我们想知道有没有办法在外部调用,使用函数内部的表变量呢?这个时候闭包的函数就产生了:闭包的定义:是JavaScript中函数的一种高级应用方法functionfn(){console.log("Iamfunctionfn");]fn()functionexecutionIt会开辟一个执行空间,(姑且称之为xxff00)console.log("Iamafunctionfn");这段代码是在xxff00的空间执行的,代码执行完后,xxff00的空间会被销毁,既然被销毁了,里面的变量也会相应的被删除。所以我想知道是否可以建造一个不会被破坏的空间?不被破坏的执行空间1.函数的返回值是一个引用数据类型2.引用数据类型可以是对象,数组,函数等3.并且在函数之外,还有变量,而这个函数的引用就是闭包的三个必要条件。在一个函数A(暂且称为A)中返回意味着抛出一个函数B1。有一个函数A,在函数A内部返回一个函数B。functionA(){varnum=100;returnfunctionB(){//返回值函数Bvarnum1=num;console.log(num1)返回num1;}}2在函数B中访问函数A的私有作用域变量functionA(){varnum=100;returnfunctionB(){//返回值函数Bvarnum1=num;//在函数B中访问函数A的局部变量console.log(num1)returnnum1;}}3在函数A外,有一个变量引用函数Bvarfn1=A();//这里调用函数A,执行结果为函数Bvarfn2=fn1();//这里调用了函数fn1(),执行结果为参考函数B
