• 立即执行函数 与 闭包


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

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

    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

  • 相关阅读:
    Python 多线程就这么简单
    Linux中使用SecureCRT上传、下载文件命令sz与rz用法实例
    LAMP第四部分 mysql相关
    LAMP第三部分php配置和mysql配置
    LAMP第二部分apache的配置
    LAMP第一部分安装mysql -apache -php
    LAMP总四部分
    用户和组管理
    系统操作命令
    2017网易---统计回文
  • 原文地址:https://www.cnblogs.com/papi/p/6527235.html
Copyright © 2020-2023  润新知