JavaScript 闭包解析
闭包的本质就是:函数A的内部函数B被A之外的函数C调用了。这样一个闭包的函数在返回时有没有释放资源的栈区。
了解js的闭包首先要清楚变量作用域的问题
var index = 1;
}
demo01();
alert(index)// 不会弹出结果 index的作用域在demo01函数内部
function demo02(){
index = 2
}
demo02();
alert(index)
//会弹出2 因为在函数内部声明变量时没有用var,所以其实index是全局变量,全局变量与某个函数的生命周期无关。
那么想要从外部获取内部的变量值该如何做呢?
我们可以在demo02中定义一个内部函数:
var index02 = 3;
function inner02(){
alert(index02);
}
return inner02;
}
var getnum = demo02();//相当于获取到了inner02
getnum();//弹出结果3
inner02就是闭包。
//index03在函数demo03执行完毕后依然存在
function demo03(){
var index03 = 99;
addone=function(){
index03++;
}
function inner03(){
alert(index03);
}
return inner03;
}
var getnum = demo03();
getnum();//弹出结果99
addone();//index03的值增加1 addone本身是全局变量它的值是一个匿名函数,而匿名函数本身也是闭包,可以在函数外部对函数内部的变量进行操作。
getnum();//弹出结果100
所以滥用闭包可能导致内存泄露,因为闭包使得变量一直在内存中不会被垃圾回收。
如果把demo03当做对象,index03代表属性,inner03代表公开的方法,也要注意不要随便修改内部的属性值。
转载于:https://www.cnblogs.com/lixiaodi/p/5311429.html
JavaScript 闭包解析相关推荐
- [转]Javascript 闭包
[转]Javascript 闭包 简介 Closure 所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 闭 ...
- javascript闭包学习
(function(){})()===>>>>函数会被立即执行function(){}是一个函数用括号包起来表示是函数表达式再加()表示函数自执行 如何理解闭包? 1.定义和 ...
- javascript闭包—围观大神如何解释闭包
闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...
- 好程序员技术文档HTML5开发中的javascript闭包
好程序员技术文档HTML5开发中的javascript闭包,事实上,通过使用闭包,我们可以做很多事情.比如模拟面向对象的代码风格;更优雅,更简洁的表达出代码;在某些方面提升代码的执行效率,同时避免对命 ...
- 理解 JavaScript 闭包{转载}
本文转载自:http://www.cn-cuckoo.com/2007/08/01/understand-javascript-closures-72.html 要成为高级 JavaScript 程序 ...
- 【javascript闭包】转载一篇不错的解释,也有几个大牛的链接
初学闭包时一直以为很简单.但伴随对一个问题深入学习后,才算真正理解了闭包,同时也发现连<<JavaScript高级程序设计>>中都些不准确的地方. 我不准备从头介绍闭包的概念, ...
- JavaScript函数—JavaScript闭包
实例解析 JavaScript 支持嵌套函数.嵌套函数可以访问上一层的函数变量. 变量 add 指定了函数自我调用的返回字值. 自我调用函数只执行一次.设置计数器为 0.并返回函数表达式. add变量 ...
- JavaScript闭包实现计数器
JavaScript闭包实现计数器 因为javascript没有局部作用域,所以可以通过以下的方法实现一个计数器: var add = (function () {var counter = 0;re ...
- Rust Closure 闭包解析(匿名函数)
Rust Closure 闭包解析(匿名函数) 文章目录 Rust Closure 闭包解析(匿名函数) 正文 1. 简单闭包 - 纯粹的匿名函数 2. 捕获上下文 & FnOnce.FnMu ...
最新文章
- stm32中如何进行printf重定向用于串口调试输出
- RDLC SubReports Exporting to Excel Are Ignored
- python:将一个文件转换为二进制文件(binary)
- IIS相关问题及解决方案
- TP、PHP同域不同子级域名共享Session、单点登录
- csdn如何插入多列表格?
- JVM Java内存区域 与 内存溢出 (系列号1)
- redis 系列16 持久化 RDB
- 运算符in和not in
- 为什么要Word转PDF,看完你就懂了
- Google Chrome浏览器用户数据迁移
- 常见电容器图片_电容分类图片-各种电容器图片
- java 实现pdf转换成图片
- 慕名而来的博客(小白)
- Error: Failed to load config “standard“ to extend from
- 验证银行卡卡号是否符合规则
- 台式机内存和服务器内存型号,台式机内存和服务器内存区分
- 电竞英雄联盟数据API接口 - 【英雄联赛统计】API调用示例代码
- Cmake 命令语句(一)
- 小黑算法成长日记8:最优多边形环状运算(加法和乘法)
热门文章
- anaconda spyder使用协程报错解决:RuntimeError: This event loop is already running
- CSDN-markdown编辑器
- java怎么加定时器_JAVA WEB程序中添加定时器
- raptor算法流程图例题_raptor程序设计例题参考答案
- Nginx 真实的 IP
- 使用JMeter压力测试
- itest系统学生登录不了_四川省中小学生艺术测评管理系统登录平台https://www.soyohui.com/app/165187/...
- 【Netty】option(ChannelOption.SO_KEEPALIVE, true) socket参数详解:KeepAlive
- python函数结构图_Python数据结构与算法之图结构(Graph)实例分析
- 大佬来告诉你在遇到B站崩了,如何防止类似事故的出现?