前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS闭包

JS闭包

作者头像
薛定喵君
发布2019-11-06 01:26:15
2.5K0
发布2019-11-06 01:26:15
举报
文章被收录于专栏:薛定喵君薛定喵君

JS闭包

闭包概念

  • 能够读取其他函数内部变量的函数
  • 定义在一个函数内部的函数,内部函数持有外部函数内变量的引用

简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数,但并不仅仅是一个函数,它是一个环境,这个环境中保存了一些相关的数据及指针引用。

变量作用域 两种:全局变量、局部变量。js中函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。

为什么需要 局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染

何时使用? 变量既想反复使用,又想避免全局污染

用法

  • 定义外层函数,封装被保护的局部变量
  • 定义内层函数,执行对外部函数变量的操作
  • 外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中

从外部读取函数内部的变量

代码语言:javascript
复制
function f1(){
    var n = 123;
    function f2(){    //f2是一个闭包
        alert(n)
    }    
    return f2;
}
  • js链式作用域:子对象会一级一级向上寻找所有父对象的变量,反之不行。
  • f2可以读取f1中的变量,只要把f2作为返回值,就可以在f1外读取f1内部变量

用途

  • 读取函数内部的变量
  • 让这些变量的值始终保持在内存中。不会再f1调用后被自动清除
  • 方便调用上下文的局部变量。利于代码封装
    • 原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束后,被垃圾回收机制回收
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JS闭包
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档