闭包 —JavaScript面向对象高级

# 闭包 #

  我的理解:面试时,先说作用域链,再说闭包产生的原因,然后是垃圾回收GC,最后说闭包。

       a.一个函数内部声明的变量,就是它的私有变量.
       b.在javascript中特性中,函数是可以访问它所在作用域链的所有变量.
       c.但函数外部是不能直接访问函数内部的私有变量
       D.通过函数内部再嵌套函数,子函数返回父函数的变量,就创建了一个闭包。

闭包的表现形式

  模块化的本质:是通过函数的局部作用域特性来产生局部上下文来保存局部变量 

  1.函数作为返回值

        function fn(){
          var count = 0;
          return function(){  //这句话是重点
             count++;
             console.log(count)
          }
       }

        var a = fn()
        a();  //1
        a();  //2
        a();  //3
        a();  //4    //a作为变量,是对fn()的引用,所以fn一直没被释放
        a = fn()     //对a重新赋值,重新把fn的引用给a 所以中间释放过
        a();  //1     

  2.函数当做参数传递
       
           var max = 10;
           var fn =function(x){
              if(x>max){
                console.log(x)
              }
           }//max是自由变量,在fn定义好后就固定,所以max =10
           
           function fn1(f){
            var max = 100;
            f(15);
           }
        
           fn1(fn) //15


  3.信息暴露和隐藏
        
        function fn(){
         var a = 10;
         var  b = [1,2,3,4];
         var count = 0;
         function addCount(){
             count++
         };
         function getCount(){
            return count;
         }
    
         return {
           add:addCount,
           get:getCount
         }
       //这里暴露出去的对象,只有两个方法,而私有变量a 和 b没有暴露,所以是保密的,可以选择性的暴露    ————模块化 seajs就是这样实现
       }
        var  a = fn(); //将引用给a

   4.异步回调
       
       
    // 闭包——异步回调
         function fn(){
             var i = 0;
             window.setInterval(function(){
                  console.log(i++)
             },1000);
             console.log('prevent')   
         }
         fn()
     
      注意:setInterval()是典型的异步,fn在执行后,打印出'prevent',然后应该fn调用完成被销毁,但是定时器依然在执行,所以fn依然还在。  
       

转载于:https://www.cnblogs.com/luowen075/p/6135869.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MapBox】5种地图(底图)样式自由切换附源码

文章目录 一、不同地图显示样式1. 卫星2. 浅色3. 深色4. 街道5. 户外二、完整源码一、不同地图显示样式 MapBox提供了5种不同形式的地图显示样式: 1. 卫星 2. 浅色

[转]vue项目中,main.js,App.vue,index.html如何调用

1、main.js是我们的入口文件,主要作用是初始化vue实例,并引入所需要的插件 2、App.vue是我们的主组件,所有页面都是在App.vue下进行切换的。其实你也可以理解为所有的路由也是App.vue的子组件。所以我将router标示为App.vue的子组件。 index…

C语言试题138之画椭圆

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:画椭圆 ellipse 2 、温馨提示…

2016年Web前端面试题

2016年Web前端面试题目汇总 以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中无法解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正。:) 阅读目录…

光纤熔接过程详细说明

在我们实际的网络工作当中会遇到光纤的熔接,由于目前光纤熔接的工艺已经成熟完善,对于一根六芯光纤整个熔接过程需要2名工程师,大约需要花费1个小时的时间就可以完成。我们首先考虑的是为光纤线缆留出足够的长度来,多了好办&#…

Playwright之录制

前言前段时间看了大佬分享的关于Playwright.NET的文章感觉挺有意思,想要阅读点击:此处,然后跟随大佬的脚步,学习了一点自动化玩,其中有一个录制功能感觉挺好玩,下面就来简单看看介绍手动操作浏览器&#xf…

【MapBox】在地图上创建多个Marker点,设置鼠标经过提示信息,单击跳转到链接

本文讲述在MapBox地图上创建多个Point点,然后设置鼠标经过每个点提示信息,再让每个点鼠标点击跳转到指定的不同的链接地址。 任务描述: 显示MapBox地图添加Marker设置鼠标经过提示设置Marker单击链接效果展示: 点击Marker跳转到指定的链接地址。 源码赠送: <!DOCTYPE …

Timequest的波形窗口调出

在使用TIMEQUEST做时序约束的时候,波形是很直观的一个界面,但是在操作的时候顺手向下一拉,波形窗口就不见了, 再report timing的时候就这样了,只有summary,没有波形窗口了. 找了半天的的view等等菜单没找到怎么打开,最后将鼠标放在下图位置他又出现了 出现上下拉的标签向上拉就…

[转]vue-codemirror 代码编辑器

codemirror 是一个非常强大的代码编辑器插件&#xff0c;但官方并没有提供 vue 的支持版本&#xff0c;不过跟 vue 集成的步骤并不复杂&#xff0c;以下是具体实现 更多精彩 更多技术博客&#xff0c;请移步 IT人才终生实训与职业进阶平台 - 实训在线相关网址 Vue 官方插件库推…

C语言试题139之输入 3 个数 a,b,c,按大小顺序输出(利用指针)

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:输入 3 个数 a,b,c,按大小顺…

【ArcGIS Pro微课1000例】0001:Win7系统ArcGIS Pro2.5安装权威教程(附软件安装包下载)

ArcGIS Pro是ESRI桌面产品线的新秀,集很多新技术于一身,原生支持64位系统,Ribbon界面,支持二三维一体化等。可以与别的版本的ArcGIS软件共存。 文章目录 1. 系统环境配置2. 安装ArcGIS pro3. 打补丁,登录账户4. 安装中文5. ArcGIS pro 2.5下载地址1. 系统环境配置 ࿰

Maven发布工程到私服

所谓发布工程就是把工程打包成jar包&#xff0c;然后选择上传到私服的某个仓库里&#xff0c;然后其他人就可以在私服上的仓库中下载到你发布的工程。 简单介绍Nexus上自带的一些仓库&#xff1a; 如果想要发布工程是需要一个拥有发布权限的用户的&#xff0c;没有发布权限的游…

善用兵者,藏于无形,90 分钟深度讲解最佳推广价值作品

&#x1f4a1;提示本文带有极大的主观色彩&#xff0c;及不代表微软组织的可视化大赛观点&#xff0c;也不代表作者本人观点。全部解读均为这里的独到观点&#xff0c;任何解释错误与作者或大赛无关。没有作品文件下载&#xff0c;全文仅从外观推断和赏析整个结构。如果你已经被…

字体类形:font-family, font-style

语法&#xff1a;{font-family:字体1,字体2,字体3,...} 作用&#xff1a;调用客户端字体 font-family: "Lantinghei SC","Microsoft Yahei",宋体,Arial,Helvetica,sans-serif; 当字体名称包含两个以上分开的单词时&#xff0c;用“”把该字体名称括起来。…

Java-开源工具类

一、集合 org.springframework.util.CollectionUtils&#xff1b; 二、字符串 com.google.common.base.Strings&#xff1b; org.apache.commons.lang3.StringUtils&#xff1b; 三、时间 java.time.LocalDateTime&#xff1b; 四、json com.alibaba.fastjson&#xff1b; 五、…

C语言试题140之输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:输入数组,最大的与第一个元…

[转]cmd 设置环境cmd环境变量命令set 设置永久环境变量命令setx

set命令 set命令用于设置当前cmd窗口中的环境变量&#xff0c;只在当前cmd窗口有效&#xff0c;cmd窗口关闭后将会失效。而其不会影响到系统中保存的用户环境变量&#xff0c; setx命令 setx设置永久用户环境变量 setx env_name env_value注意:有的路径中会带有空格,所以最好用…

【ArcGIS Pro微课1000例】0003:ArcGIS pro 2.5加载OSGB点云模型案例教程

Esri采用的spk i3s标准(Indexed 3D Scene),是Esri推出的开放标准。I3S标准作为开放的标准已经得到了市面上主流的倾斜摄影测量建模软件的支持,如Bentley的 ContextCapture(国内简称为Smart 3D)、Pix4D、Vricon,这些软件均支持基于I3S标准的数据格式SLPK的导出,生成的SLP…

HTML基础第四讲---图像

转自&#xff1a;https://blog.csdn.net/likaier/article/details/326735 图像&#xff0c;也就是images&#xff0c;在html语法中用img来表示&#xff0c;其基本的语法是&#xff1a; <img src#> #图象的 URL&#xff0c;关于url就是指的是图像在网上的地址。 <i…

机器学习 vs. 深度学习

1. bias/vairance Trend # 1&#xff1a;Scale driving Deep Learning process. 2. feature learning 的方式 A common computer vision pipeline before 2012&#xff1a; a. find interest points.b. crop patches around them.c. represent each patch with a sparse local …