zoukankan      html  css  js  c++  java
  • 立即执行函数 与 闭包

    暧昧关系?
    立即执行函数能配合闭包保存状态。

    像普通的函数传参一样,立即执行函数也能传参数。如果在函数内部再定义一个函数,而里面的那个函数能引用外部的变量和参数(闭包),利用这一点,我们能使用立即执行函数锁住变量保存状态。

    javascript立即执行函数表达式(IIFE)

    // 并不会像你想象那样的执行,因为i的值没有被锁住
    // 当我们点击链接的时候,其实for循环已经执行完了
    // 于是在点击的时候i的值其实已经是elems.length了
    var elems = document.getElementsByTagName( 'a' );
     
    for ( var i = 0; i < elems.length; i++ ) {
     
      elems[ i ].addEventListener( 'click', function(e){
        e.preventDefault();
        alert( 'I am link #' + i );
      }, 'false' );
     
    }
     
    // 这次我们得到了想要的结果
    // 因为在立即执行函数内部,i的值传给了lockedIndex,并且被锁在内存中
    // 尽管for循环结束后i的值已经改变,但是立即执行函数内部lockedIndex的值并不会改变
    var elems = document.getElementsByTagName( 'a' );
     
    for ( var i = 0; i < elems.length; i++ ) {
     
      (function( lockedInIndex ){
     
        elems[ i ].addEventListener( 'click', function(e){
          e.preventDefault();
          alert( 'I am link #' + lockedInIndex );
        }, 'false' );
     
      })( i );
     
    }
     
    // 你也可以这样,但是毫无疑问上面的代码更具有可读性
    var elems = document.getElementsByTagName( 'a' );
     
    for ( var i = 0; i < elems.length; i++ ) {
     
      elems[ i ].addEventListener( 'click', (function( lockedInIndex ){
        return function(e){
          e.preventDefault();
          alert( 'I am link #' + lockedInIndex );
        };
      })( i ), 'false' );
     
    }
    

    2017/2/28

  • 相关阅读:
    quratz数据存储
    quratz线程
    scheduler 基本原理
    一致性哈希算法
    高并发流量控制
    049 DSL语句
    048 SparkSQL自定义UDAF函数
    047 SparkSQL自定义UDF函数
    Quratz的理解
    046 SparlSQL中的函数
  • 原文地址:https://www.cnblogs.com/papi/p/6527235.html
Copyright © 2011-2022 走看看