<script>//什么是闭包:就是函数作用域 --closure//全局:global/*--函数出生时会自动保存所在的词法作用域,词法作用域意思就是所在的作用域们--词法作用域会被保存在scope中--为什么保存在scope?--因为这样可以保存函数原有的属性,方便在别的地方使用---当听到闭包这个词的时候,就应该知道它是一个函数作用域,被保存在另一个函数的scope中*///查看函数scopes//下面这个函数是生在全局中的,所以它的词法作用域就是window这个作用域function a(){}//用console.dir查看scopesconsole.dir(a);//如果上面的函数不生在全局而是在别的作用域{let b=1997;function c(){//注意函数只会存对自己有用的作用域,如果下面//没有输出b的话,函数不会把块级作用域存在scopes中console.log(b);} }console.dir(c);/*如果块级作用域中放一个函数,这个函数中再放一个函数*/{let g=9;function d(){var f=999;//d函数的作用域是e函数的闭包,//e函数的闭包存在e函数的scopes属性中function e(){console.log(g,f);}console.dir(e);}d();}/*简化代码解释闭包注意:函数里面套函数,外层函数是里层函数的闭包*/(function (){//自调用的函数中声明一个函数var i=7;function h(){console.log(i);}//函数外打印输出这个函数console.dir(h);})()</script>

闭包的作用

  <script>/*什么是静态函数--就是声明了一个函数没调用,但是直接打印出来的就是静态函数*/function a(){return 111}console.log(a);/*什么是动态函数--就是调用了的函数*/function b(){return 222}//问题:为什么直接b()调用不会出现return的222?console.log( b());/*--闭包的缺陷:由于正常函数执行完会形成局部作用域对象--当函数执行结束时,这个局部作用域对象会被销毁,来节省空间--但是闭包机制会导致函数作用域被保存到另一个函数中,--然后这个函数作用域就无法释放,导致内存的浪费为了解决这个问题,es6版本就有了块级作用域来代替闭包但是由于大家习惯了用闭包,所以闭包还是很常见*//*闭包的作用就是给函数提供私有变量,避免全局污染*///例如:记录函数的调用次数/*3.但是这个变量放在全局会造成全局污染*///4.解决方法:ES6之前是用匿名函数自调用给函数提供一个闭包//6.return完之后还要用一个变量保存才行var c=(function(){var count=0;function c(){//1.由于函数调用完作用域就会销毁,所以要把声明的//2.变量放在函数外//   var count=0;count++;console.log('调用了'+count+'次');}return c})()/*5.问题:为什么会提示c函数未定义:因为外面不可以调用局部函数里面的东西解决方法:要把函数里面的东西暴露给外面就要用return*/c();c();c();c();c();console.dir(c);</script>

使用了闭包后 ,count被放在了closure中,而不是window全局中,避免了全局污染

什么是闭包以及闭包有什么作用相关推荐

  1. 什么是闭包,闭包的作用与好处是什么,何时使用闭包,对闭包的改进

    闭包:外部函数定义的内部函数就是闭包.闭包的作用及好处:闭包给访问外部函数定义的内部变量创造了条件.也将关于函数的一切封闭到了函数内部,减少了全局变量,这也是闭包的真实含义.与普通函数的区别:1,普通 ...

  2. 什么是闭包?闭包有啥作用?闭包的应用有啥?内存优化?

    什么是闭包?闭包的应用有哪些? 是不是很多人一开始所了解的闭包是一个函数套着另一个函数,然后其他的函数可以引用里面的函数的变量(很久之前俺就是这么理解的)?看完这篇文章后,球球泥们不要再这么回答了好嘛 ...

  3. 什么是闭包?闭包有什么作用?

    概念: 闭包是变量作用域的特殊情况,以下情况会产生闭包 函数作为参数被传递 函数作为返回值被传递 闭包的作用: 被闭包引用的变量,不会被销毁 闭包可以实现局部变量,避免全局变量污染 闭包执行过程: 闭 ...

  4. 闭包、闭包作用及缺点

    闭包:是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见形式:就是在一个函数内部创建另一个函数. 词法作用域 function outer(){var localVal = 30;functi ...

  5. 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

    js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...

  6. PHP性状闭包,PHP 闭包及Closure类

    原标题:PHP 闭包及Closure类 匿名函数 实现一个简单的匿名函数: $func = function { echo "this is a funcn"; }; 上面就是一个 ...

  7. 什么是闭包以及闭包的特点

    什么是闭包以及闭包的特点 闭包的主要作用是里面的变量和参数不会被垃圾回收机制回收 函数的定义过程与执行过程 1.开辟一个存储空间来装代码块 2.预编译 3.将存储空间和预编译的空结合变成一个执行空间 ...

  8. 【闭包】什么是闭包?闭包用途

    1.什么是闭包? 如果一个函数用到了它作用域外面的变量,那么这个变量和这个函数之间的环境就叫闭包. 闭包有3个特性: ①函数嵌套函数: ②函数内部可以引用函数外部的参数和变量: ③参数和变量不会被垃圾 ...

  9. Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么 ...

最新文章

  1. java idea 模块_java-项目之间共享模块的Intellij
  2. 什么是REST?以及RESTful
  3. 轻松精通数据库管理之道——运维巡检系列
  4. DIV常见任务(上) - 常规任务
  5. Linux find 用法示例
  6. exchange揭开拨号音还原法的神秘面纱
  7. android实现计时器
  8. 如何通过Restful API的方式读取SAP Commerce Cloud的Product Reference
  9. jQuery弹出框示例
  10. SpringCloud Zuul(一)之介绍
  11. spring jdbctemplate 实体列与数据表列 查询
  12. 来华30载,这些都是Oracle的神来之笔……
  13. java导出csv文件_java导出生成csv文件的方法
  14. Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP
  15. linux通过光盘安装命令包,RHEL5通过光盘配置本地yum仓库及命令详解
  16. elipse手机设备显示Target unknown解决方法
  17. 使用Python实现搜索任意电影资源的磁力链接
  18. java io closed_java.io.IOException: Stream closed 异常的原因和处理
  19. xgboost 中的二阶导数为什么收敛更快?
  20. 科技爱好者周刊(第 168 期):游戏《底特律:变人》

热门文章

  1. ExtJs中点击页面有时不加载的问题
  2. AI人工智能电话机服务电话
  3. owaspbwa之WebGoat
  4. 此远程计算机不支持remoteapp,[Tips] 使用 RemoteApp 方式访问远程桌面上的应用程序...
  5. spark sql读写hive的过程
  6. Java代码实现两个数据库之间的数据同步
  7. 平行空间--打造自己的开场动画
  8. BugPhobia终章篇章:学霸在线系统Beta阶段展示
  9. pythonorm_python中ORM是什么?
  10. rabbitmq-fanout(广播模式)