首页 > 其他分享 >js闭包的理解。

js闭包的理解。

时间:2022-09-26 14:58:45浏览次数:45  
标签:闭包 inner2 函数 外部 js 理解 内存 inner

一、概念

闭包函数:声明在一个函数中的函数叫做闭包。

闭包:内部函数总是可以访问其在外部函数声明的参数和变量,使其它在外部函数被返回。

二、特点

1.让外部访问函数内部变量成为可能。

2.局部变量会常驻在内存。

3.可以避免使用全局变量,防止全局变量污染。

4.会造成内存泄漏(有一块内存空间被长期占用,而不被释放)。

三、闭包的创建

闭包就是可以创建一个独立的环境,每个闭包里面的环境都是独立的,互不干扰。
闭包会发生内存泄漏,每次外部函数执行的时 候,外部函数的引用地址不同,都会重新创建一个新的地址。但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删除,保留一根指针给内部活动对象。

四、闭包内存泄漏为key=value,key被删除了,value常驻在内存中。

内存泄漏就是可用的内存少了,因为key 被删除了,value值一直存在内存中且调用不到,这样实际可用的内存就少了

五、结论

闭包找到的是同一地址中父级函数中对应变量最终的值

function outerFn(){
var i = 0;
function innerFn(){
i++;
console.log(i);
}
return innerFn;
}
var inner = outerFn(); //每次外部函数执行的时候,都会开辟一块内存空间,外部函数的地址不同,都会重新创建一个新的地址
inner();
inner();
inner();
var inner2 = outerFn();
inner2();
inner2();
inner2(); //1 2 3 1 2 3

 

标签:闭包,inner2,函数,外部,js,理解,内存,inner
From: https://www.cnblogs.com/xl15/p/16730945.html

相关文章

  • js红宝书学习笔记(一)引用类型
    一.引用类型  ECMAScript中,引用类型是一种数据结构称之为对象定义,,引用对象不同于传统面向对象语言所支持的类和接口等基本结构 创建Object实例的两种方式:new操......
  • [RxJS] ShareReplay vs share
    ShareReplayisusingReplaySubject.Itwillreplythemessagestolatersubscribers.Itturnsunicastobservabletomulticaseobservable.shareReplay(1,2000):......
  • [Rxjs] Build a basic application store with Subjects
    Store.jsimport{BehaviorSubject,Subject}from'rxjs';import{map,distinctUntilKeyChanged,scan}from'rxjs/operators';exportclassObservableStore{......
  • JS高级
    1.作用域1.1局部作用域局部作用域分为函数作用域和块作用域({})var是函数作用域const,let是块作用域1.2全局作用域<script>和js文件的最外层是全局作用域1.3作......
  • 如何以干净的方式在 NextJs 中创建请求中间件
    如何以干净的方式在NextJs中创建请求中间件中间件是每个API的一个重要方面,它们在NextJs项目中也很有用,但官方文档没有教你如何实现它们,幸好你找到了这篇我将教你如......
  • JS promise 原理
    Promise对象有三种状态:pending、fullfilled 和 rejected,分别代表了promise对象处于等待、执行成功和执行失败状态。创建promise对象后处于pending状态,pending状态......
  • 对软件工程的理解
    对软件工程的理解软件工程就是经过时间考验、实践证明的思想和方法论的集合,是一门经验学科。对于一个稍微大型的工程我们不仅仅只要求数据结构简洁、算法实现快速。因为......
  • vue 中使用 富文本编辑器;带图片上传时后台报错JSON parse error: Unexpected characte
    使用的是 wangEditorvue安装好后,在components文件夹下创建一个创建一个类<template><divref="editor"></div></template><script>importEfrom'wange......
  • 软件工程的理解
          在学习这门课程以前,我一直认为软件工程是学习如何制作一个软件。但现在,我的看法有了改变。软件工程从客户的需求开始,到理解和定义用户的需求,再到实现、管理,同......
  • js 变量提升
    a();functiona(){alert('1')}vara=function(){alert('2')}a();//先弹出alert(1),再弹出alert(2)a();vara=function(){alert('2')}functi......