什么是闭包以及闭包有什么作用
<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,普通 ...
- 什么是闭包?闭包有啥作用?闭包的应用有啥?内存优化?
什么是闭包?闭包的应用有哪些? 是不是很多人一开始所了解的闭包是一个函数套着另一个函数,然后其他的函数可以引用里面的函数的变量(很久之前俺就是这么理解的)?看完这篇文章后,球球泥们不要再这么回答了好嘛 ...
- 什么是闭包?闭包有什么作用?
概念: 闭包是变量作用域的特殊情况,以下情况会产生闭包 函数作为参数被传递 函数作为返回值被传递 闭包的作用: 被闭包引用的变量,不会被销毁 闭包可以实现局部变量,避免全局变量污染 闭包执行过程: 闭 ...
- 闭包、闭包作用及缺点
闭包:是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见形式:就是在一个函数内部创建另一个函数. 词法作用域 function outer(){var localVal = 30;functi ...
- 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...
- PHP性状闭包,PHP 闭包及Closure类
原标题:PHP 闭包及Closure类 匿名函数 实现一个简单的匿名函数: $func = function { echo "this is a funcn"; }; 上面就是一个 ...
- 什么是闭包以及闭包的特点
什么是闭包以及闭包的特点 闭包的主要作用是里面的变量和参数不会被垃圾回收机制回收 函数的定义过程与执行过程 1.开辟一个存储空间来装代码块 2.预编译 3.将存储空间和预编译的空结合变成一个执行空间 ...
- 【闭包】什么是闭包?闭包用途
1.什么是闭包? 如果一个函数用到了它作用域外面的变量,那么这个变量和这个函数之间的环境就叫闭包. 闭包有3个特性: ①函数嵌套函数: ②函数内部可以引用函数外部的参数和变量: ③参数和变量不会被垃圾 ...
- Javascript闭包和闭包的几种写法及用途
好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途. 一.什么 ...
最新文章
- java idea 模块_java-项目之间共享模块的Intellij
- 什么是REST?以及RESTful
- 轻松精通数据库管理之道——运维巡检系列
- DIV常见任务(上) - 常规任务
- Linux find 用法示例
- exchange揭开拨号音还原法的神秘面纱
- android实现计时器
- 如何通过Restful API的方式读取SAP Commerce Cloud的Product Reference
- jQuery弹出框示例
- SpringCloud Zuul(一)之介绍
- spring jdbctemplate 实体列与数据表列 查询
- 来华30载,这些都是Oracle的神来之笔……
- java导出csv文件_java导出生成csv文件的方法
- Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP
- linux通过光盘安装命令包,RHEL5通过光盘配置本地yum仓库及命令详解
- elipse手机设备显示Target unknown解决方法
- 使用Python实现搜索任意电影资源的磁力链接
- java io closed_java.io.IOException: Stream closed 异常的原因和处理
- xgboost 中的二阶导数为什么收敛更快?
- 科技爱好者周刊(第 168 期):游戏《底特律:变人》