day6.闭包

  1. 闭包现象

    day6.闭包

    当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。

  2. 闭包的作用

    • 实现公有变量
      eg:函数累加器

      function add() i
      var count = 0;function demo( ) {
      count ++;
      console.log ( count) ;
      }
      return demo;
      }
      var counter = add ( );
      counter( ) ;
      counter() ;
      counter( ) ;
      counter( ) ;
      counter( );
      counter( ) ;
      counter( ) ;
      
      
    • 可以做缓存(存储结构):外部不可见,但确实有的存储结构
      eg,:eater

    • 可以实现封装,属性私有化。
      eg: Person();

    • 模块化开发,防止污染全局变量

```js
function test( ) {
    var arr = [];
    for(var i = 0; i < 10; i ++){
        arr[i] = function () {
        console.log(i);
        }
    }    
    return arr;
}
var myArr = test( );//输出10 10 10 10 ...

//改进
function test( ) {
    var arr = [];
    for(var i = 0; i < 10; i ++) {
        ( function (j) {//立即执行函数,每个单数生成自己单的的AO,里面保存j的值,而不是向上面的那样生成的都是test()的环境
        //j = 0;
        arr[j] = function ( ) {
        document.write( j + " ");
        }
        }(i));
    }
    return arr;
}
var myArr = test( );
for(var j = 0; j < 10;j++){
myArr[j]( );
}


```
  1. 试题

    var x = 1;
    if( function f( ) {}){
    ×+=typeof f;
    }
    console.log(x);//求结果
    
    
    

{
×+=typeof f;
}
console.log(x);//求结果

疑问:if的条件判断里面函数定义为什么能执行?

上一篇:Python 对比两个list中元素是否相同(忽略顺序)


下一篇:Java多线程学习二十七:AtomicInteger 在高并发下性能不好,如何解决?为什么?