JS闭包

举报
薛定喵君 发表于 2021/06/03 23:05:23 2021/06/03
【摘要】 # JS闭包 闭包概念 能够读取其他函数内部变量的函数定义在一个函数内部的函数,内部函数持有外部函数内变量的引用 简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数,但并不仅仅是一个函数,它是一个环境,这个环境中保存了一些相关的数据及指针引用。 变量作用域 两种:全局变量、局部变量。js中函数内部可以读取全局变量,函数...

# JS闭包

闭包概念

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

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

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

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

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

用法

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

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


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

用途

  • 读取函数内部的变量
  • 让这些变量的值始终保持在内存中。不会再f1调用后被自动清除
  • 方便调用上下文的局部变量。利于代码封装
    • 原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束后,被垃圾回收机制回收

文章来源: blog.csdn.net,作者:薛定喵君,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jsxg2009/article/details/115244183

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。