Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 541|回复: 0

js闭包及问题的解决

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-16 10:34:24 | 显示全部楼层 |阅读模式
    • 闭包定义,作用

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

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

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

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

    • 闭包与异步执行函数

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

        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...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-24 17:39 , Processed in 0.060386 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表