js闭包

xiaoxiao2023-12-12  67

引自: http://www.iteye.com/topic/349458

 

Js代码 function outerFun()   {       var a=0;       function innerFun()       {           a++;           alert(a);       }       return innerFun;  //注意这里   }   var obj=outerFun();   obj();  //结果为1   obj();  //结果为2   var obj2=outerFun();   obj2();  //结果为1   obj2();  //结果为2   function outerFun() { var a=0; function innerFun() { a++; alert(a); } return innerFun; //注意这里 } var obj=outerFun(); obj(); //结果为1 obj(); //结果为2 var obj2=outerFun(); obj2(); //结果为1 obj2(); //结果为2

 

什么是闭包:

当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.

 

--------------------------------------------------------------------------------------------------------

 

再来看一个例子

Js代码 function outerFun()           {               var a =0;               alert(a);                  }           var a=4;           outerFun();           alert(a);   function outerFun() { var a =0; alert(a); } var a=4; outerFun(); alert(a);

 结果是 0,4 .  因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.

 

再看下面的代码:

Js代码 function outerFun()   {       //没有var        a =0;       alert(a);          }   var a=4;   outerFun();   alert(a);   function outerFun() { //没有var a =0; alert(a); } var a=4; outerFun(); alert(a);

 结果为 0,0 真是奇怪,为什么呢?

 

作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 .当执行a=0时,因为没有使用var关键字,因此赋值操作会沿着作用域链到var a=4;  并改变其值.

 

 

转载请注明原文地址: https://www.6miu.com/read-5012734.html

最新回复(0)