• 闭包定义,作用

    闭包就是能够读取其他函数内部变量的函数。

    作用:一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中

    缺点:闭包会保存函数中的变量在内存中,导致内存消耗大

      闭包会在父函数外部改变父函数内部变量的值

  • 闭包与异步执行函数

  前端使用异步执行的情况有

    a  定时任务:setTimeOut() setInterval()

    b  网络请求:ajax请求 动态<img>加载

    c  时间绑定

  当遇到异步的情况时,函数的输出结果:

    for(var i = 1; i <= 5;i++){

      setTimeout(function timer(){

        console.log( i );

      },i * 1000);

    } //输出结果是6 6 6 6 6 6

  因为,当执行setTimeOut()时,会暂时跳过这一段,放在缓冲区,当for循环执行结束之后,由于i是全局变量,此时在执行console.log( i )就会是 6,而不是预期中的0 1 2 3 4 5,解决办法通常有两种一是使用ES6中let使for循环中的变量变成块儿作用域,二就是使用立即执行函数,通过函数作用域可以保存变量的特性来将每次循环的变量 i 保存到函数中。

  使用let:

    for( let i = 0; i <= 5; i++){

      setTimeout( function timer(){

        console.log( i );

      },i * 1000);

    }// 输出结果 0 1 2 3 4 5

  使用立即执行函数(IIFE):

    for(var i = 0; i <= 5; i++){

      (function(){

        var j = i;

        setTimeout( function timer(){

          console.log( j );

        }, j * 1000);

      })();

    }//输出结果0 1 2 3 4 5

最新文章

  1. Tarjan
  2. formValidator的一些验证实例
  3. sql盲注及其相关方法
  4. [Codeforces137C]History(排序,水题)
  5. [C#]DataTable常用操作总结
  6. mybatis学习笔记二(接口注解)
  7. ubuntu6.04下安装Eclipse for C/C++ Development
  8. D02 TED Elon Mulsk The future we&#39;re building — and boring
  9. 四十六、android中的Bitmap
  10. Java_泛型
  11. vue 使用sass 和less
  12. C++多态实现原理详解
  13. Awesome Python,Python的框架集合
  14. Linux command ------ vi / vim
  15. C#邮件发送(最坑爹的邮箱-QQ邮箱)
  16. Flash Actionscript 多线程Worker 压缩图片
  17. Chrome插件汇总
  18. 发布Framework 4.0到iis时,出现HTTP 错误 403.14 - Forbidden
  19. Hadoop 2.7.4 关闭与启动
  20. ArrayList用法详解

热门文章

  1. python中Requests模块中https请求在设置为忽略有效性验证,屏蔽告警信息的方式
  2. Friends and Cookies(思维)
  3. 《Linux内核与分析》第六周
  4. 敏捷开发与xp实践 实验报告
  5. 删除多余的自编译的内核、mysql连接不了的问题
  6. Qt多线程-QThread
  7. paoding rose controller包及文件名命名规则
  8. [计算机网络-数据链路层] CSMA、CSMA/CA、CSMA/CD详解
  9. Spring Autowired原理
  10. 第86天:HTML5应用程序标签和智能表单