闭包的本质就是:函数A的内部函数B被A之外的函数C调用了。这样一个闭包的函数在返回时有没有释放资源的栈区。

了解js的闭包首先要清楚变量作用域的问题

function demo01(){
    var index = 1;
}
demo01(); 
alert(index)// 不会弹出结果 index的作用域在demo01函数内部 
function demo02(){
     index = 2

demo02();
alert(index) 
//会弹出2 因为在函数内部声明变量时没有用var,所以其实index是全局变量,全局变量与某个函数的生命周期无关。

那么想要从外部获取内部的变量值该如何做呢?

我们可以在demo02中定义一个内部函数:

function demo02(){

var index02 = 3;
    function inner02(){
        alert(index02);
    }
    return inner02;
}
var getnum = demo02();//相当于获取到了inner02
getnum();//弹出结果3

inner02就是闭包。

//闭包使得index03变量一直存在内存中
//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 闭包解析相关推荐

  1. [转]Javascript 闭包

    [转]Javascript 闭包 简介 Closure 所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 闭 ...

  2. javascript闭包学习

    (function(){})()===>>>>函数会被立即执行function(){}是一个函数用括号包起来表示是函数表达式再加()表示函数自执行  如何理解闭包? 1.定义和 ...

  3. javascript闭包—围观大神如何解释闭包

    闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...

  4. 好程序员技术文档HTML5开发中的javascript闭包

    好程序员技术文档HTML5开发中的javascript闭包,事实上,通过使用闭包,我们可以做很多事情.比如模拟面向对象的代码风格;更优雅,更简洁的表达出代码;在某些方面提升代码的执行效率,同时避免对命 ...

  5. 理解 JavaScript 闭包{转载}

    本文转载自:http://www.cn-cuckoo.com/2007/08/01/understand-javascript-closures-72.html 要成为高级 JavaScript 程序 ...

  6. 【javascript闭包】转载一篇不错的解释,也有几个大牛的链接

    初学闭包时一直以为很简单.但伴随对一个问题深入学习后,才算真正理解了闭包,同时也发现连<<JavaScript高级程序设计>>中都些不准确的地方. 我不准备从头介绍闭包的概念, ...

  7. JavaScript函数—JavaScript闭包

    实例解析 JavaScript 支持嵌套函数.嵌套函数可以访问上一层的函数变量. 变量 add 指定了函数自我调用的返回字值. 自我调用函数只执行一次.设置计数器为 0.并返回函数表达式. add变量 ...

  8. JavaScript闭包实现计数器

    JavaScript闭包实现计数器 因为javascript没有局部作用域,所以可以通过以下的方法实现一个计数器: var add = (function () {var counter = 0;re ...

  9. Rust Closure 闭包解析(匿名函数)

    Rust Closure 闭包解析(匿名函数) 文章目录 Rust Closure 闭包解析(匿名函数) 正文 1. 简单闭包 - 纯粹的匿名函数 2. 捕获上下文 & FnOnce.FnMu ...

最新文章

  1. stm32中如何进行printf重定向用于串口调试输出
  2. RDLC SubReports Exporting to Excel Are Ignored
  3. python:将一个文件转换为二进制文件(binary)
  4. IIS相关问题及解决方案
  5. TP、PHP同域不同子级域名共享Session、单点登录
  6. csdn如何插入多列表格?
  7. JVM Java内存区域 与 内存溢出 (系列号1)
  8. redis 系列16 持久化 RDB
  9. 运算符in和not in
  10. 为什么要Word转PDF,看完你就懂了
  11. Google Chrome浏览器用户数据迁移
  12. 常见电容器图片_电容分类图片-各种电容器图片
  13. java 实现pdf转换成图片
  14. 慕名而来的博客(小白)
  15. Error: Failed to load config “standard“ to extend from
  16. 验证银行卡卡号是否符合规则
  17. 台式机内存和服务器内存型号,台式机内存和服务器内存区分
  18. 电竞英雄联盟数据API接口 - 【英雄联赛统计】API调用示例代码
  19. Cmake 命令语句(一)
  20. 小黑算法成长日记8:最优多边形环状运算(加法和乘法)

热门文章

  1. anaconda spyder使用协程报错解决:RuntimeError: This event loop is already running
  2. CSDN-markdown编辑器
  3. java怎么加定时器_JAVA WEB程序中添加定时器
  4. raptor算法流程图例题_raptor程序设计例题参考答案
  5. Nginx 真实的 IP
  6. 使用JMeter压力测试
  7. itest系统学生登录不了_四川省中小学生艺术测评管理系统登录平台https://www.soyohui.com/app/165187/...
  8. 【Netty】option(ChannelOption.SO_KEEPALIVE, true) socket参数详解:KeepAlive
  9. python函数结构图_Python数据结构与算法之图结构(Graph)实例分析
  10. 大佬来告诉你在遇到B站崩了,如何防止类似事故的出现?