IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> js闭包的理解 -> 正文阅读

[JavaScript知识库]js闭包的理解

1.什么是闭包:

闭包是一种引用关系,该引用关系存在于内部函数中,引用的是外部函数中的变量对象

2.闭包产生的三大要素:

1.函数的嵌套
2.内部函数对外部函数局部变量的调用
3.使用(调用)外部函数

3.常见的闭包:

1.一个函数做为另一个函数的返回值
2.将一个函数作为实参传递给另一个函数
3.使用私有方法操作独立的私有属性

4.闭包的作用

1.延长外部函数变量对象的生命周期
2.让函数外部可以操作(读写)函数内部的数据(变量/函数),通过闭包间接操作
3. 注意: 浏览器为了性能后期将外部函数中不被内部函数使用的变量清除了

5.闭包的生命周期

1.生成:在嵌套内部函数定义的时候就产生了 不是在外部函数调用时
2. 死亡: 在嵌套的内部函数成为垃圾对象时

闭包的缺点和解决(内存泄漏和内存溢出)

    内存泄漏 : 内存无法释放;
	内存溢出 : 内存被撑爆;
	f = null;  解决方式;让闭包机制清除,必须删除外部函数调用的时候生成的(定义的那个对应内部函数);

下面来看一个实例:

在这里插入图片描述

因为存在闭包,所以输出的是 1 2 3 ,为什么会这样呢?
因为fn的返回值是一个函数,所以相当于f1()给了n ,n随时都有可能被调用 而n()调用时,需要调用fn的变量对象,所以fn函数的执行上下文环境一直存在,所以a一直累加,正常的函数调用时创建函数执行上下文环境,执行完时环境自动销毁。
下面再通过一张图来了解闭包的运行机制:
在这里插入图片描述
下面再来看关于闭包的两道面试题:

var name = "The Window";
  		var object = {
    			name: "My Object",
    			getNameFunc: function () {
				
      				return function () {
        				return this.name;
      				};
    		     	}
  		};
  		console.log(object.getNameFunc()());  
  		//输出The Window ,这道题目其实不存在闭包关系,因为没有内部函数对外部函数变量的调用,返回的匿名函数由window调用
  		//实例二
  		var name2 = "The Window";
  		var object2 = {
    			name2: "My Object",
    			getNameFunc: function () {
      				var that = this;
      				return function () {
        				return that.name2;
      				};
    			}
  		};
  		console.log(object2.getNameFunc()());
  		//输出The Window 因为object2.getNameFunc() object调用了方法 所以this指向object 存在闭包关系
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 01:03:52  更:2022-02-19 01:04:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:59:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码