ES6 闭包

article/2025/11/6 7:45:11

闭包

一、变量作用域

变量根据作用域的不同分为两种:全局变量和局部变量。

  1. 函数内部可以使用全局变量。
  2. 函数外部不可以使用局部变量。
  3. 当函数执行完毕,本作用域内的局部变量会销毁。

二、闭包的概念

  • **闭包函数:**声明一个在函数中的函数,有权访问另一个函数作用域中变量,叫做闭包函数。(函数嵌套函数)
  • **闭包:**内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。
  • **闭包的主要作用:**延伸了变量的作用范围。

演示:

从外部访问函数内部的变量

三、闭包的特点

  • 让外部访问函数内部变量成为可能;
  • 局部变量会常驻在内存中,不会被垃圾回收机制回收;
  • 可以避免使用全局变量,防止全局变量污染;
  • 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)

四、闭包的应用场景

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

例子1:

function funA(){var a = 10;  // funA的活动对象之中;return function(){   //匿名函数的活动对象;alert(a);}
}
var b = funA();
b();  //10

例子2:

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

例子3:

//情况1
//闭包函数的外部函数没有初值
var i = 0;  //全局变量function outerFn(){function innnerFn(){i++;console.log(i);}return innnerFn;
}var inner1 = outerFn(); //闭包函数的外部函数也没有初值,用的全局变量
var inner2 = outerFn(); 
//两个函数共用同一个全局变量
inner1();	//1
inner2();	//2
inner1();	//3
inner2();	//4//情况2
//闭包函数的外部函数有初值
function outerFn(){
var i = 0;function innnerFn(){i++;console.log(i);}return innnerFn;
}
var inner1 = outerFn();
var inner2 = outerFn();
inner1();	//1
inner2();	//1
inner1();	//2
inner2();	//2

场景例子4:打车价格计算

  1. 起步价 13(3公里内),之后每多一公里增加 5 块钱,用户输入公里数就可以计算打车价格。
  2. 如果拥堵,多收十元.

  • 用 ES6 的语法在对象中定义函数的时候,可以删除 function 关键词和冒号

五、闭包总结

  1. 闭包是什么:闭包是一个函数(一个作用域可以访问另外一个函数的局部变量)。
  2. 闭包的作用是什么:延伸变量的作用范围。

没有产生闭包,因为并没有局部变量,所以访问到的是全局变量 The Window

let name = 'The Window'
let object = {name: 'My Object',getNameFunc(){return function(){return this.name}}
}
let f = object.getNameFunc()
console.log(f()) //The Window

产生了闭包:因为 this 在函数内部被赋值给了 that,指向的是 object 这个对象。

let name = 'The Window'
let object = {name: 'My Object',getNameFunc(){let that = thisreturn function(){return that.name}}
}
let f = object.getNameFunc()
console.log(f()) //My Object

http://chatgpt.dhexx.cn/article/mHPWIVKp.shtml

相关文章

vue 闭包

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁! 闭包的特点&#…

js 【详解】闭包

闭包的概念 如果一个函数访问了此函数的父级及父级以上的作用域变量,那么这个函数就是一个闭包。 所以以下写法都是闭包 var a 1;// 匿名的立即执行函数,因访问了全局变量a,所以也是一个闭包(function test (){alert(a);})()本质上&#xf…

python怎么闭包_Python闭包

Python闭包教程 闭包就是一个 在 闭包的记忆功能 在 Python 中,被捕获到闭包中的变量让闭包本身拥有了记忆效应,闭包中的逻辑可以修改闭包捕获的变量,变量会跟随闭包生命期一直存在,闭包本身就如同变量一样拥有了记忆功能。 Pytho…

闭包、闭包应用场景

什么是闭包 要理解 JavaScript 中的闭包,需要先知道以下两个知识点: JavaScript 中的作用域和作用域链JavaScript 中的垃圾回收 回顾这两个知识点: 1. JavaScript 中的作用域和作用域链 作用域就是一个独立的地盘,让变量不会…

闭包是什么?五分钟带你了解闭包

闭包 前言 闭包对每个前端来说都是一个绕不开的话题。学习之初也因为搞清闭包的概念耗费了不少精力,今天写一篇博客来记录本人对闭包的理解,笔者水平有限,若有疏漏及错误,愿不吝赐教。 什么是闭包? 你可以在一个函…

闭包:什么是闭包、闭包的作用、闭包的解决

1、什么是闭包 学习闭包我们要清楚函数作用域、内存回收机制、作用域继承。 1.1 函数作用域 作用域我们可以认为它是一个封闭的盒子,只让它在这个盒子里面进行操作,也可以称这个盒子为独立作用域。在js中,一个函数要执行时就会在内存里面创…

基于SSH的学生考勤管理系统

020基于SSH的学生考勤管理系统 开发环境: Jdk7(8)Tomcat7(8)MysqlIntelliJ IDEA(Eclipse) 数据库: MySQL 技术: SpringStruts2HiberanteJqueryJavaScriptAjaxJSPBootstrap 适用于: 课程设计,毕业设计,学…

springboot学生考勤管理系统

032-springboot学生考勤管理系统演示录像2022 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件&…

java管理系统课设,基于Java的学生考勤管理系统设计毕业设计

基于Java的学生考勤管理系统设计毕业设计 本科生毕业论文(设计)本科生毕业论文(设计) 基于基于 JavaJava 的学生考勤管理的学生考勤管理系统设计系统设计 Design of Student Attendance Management System Based on Java 专 业 电子信息工程 姓 名 学 号 指 导 教 师 完 成 时…

学生考勤及行为管理系统_学生考勤管理系统_考勤管理系统-先知科技

考勤管理系统简介: 先知智慧校园考勤管理系统帮助各大院校解决教职工考勤,学生上课考勤多种方式考勤。可通过手机端app考勤,终端考勤机器考勤,刷卡通过人形通道考勤,电子班牌考勤,人脸识别考勤多种方式正对…

基于php013学生考勤管理系统

经过查阅关于高校考勤系统的优秀毕业设计,使我对基于PHP的学生考勤管理系统的设计有了进一步了解,大致分为三个大模块:学生模块,教师模块和管理员模块。系统为需要考勤的人员和学院提供不同权限的管理、查询、考勤等操作。考勤系统…

[附源码]java毕业设计基于的高校学生考勤管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于jsp学生考勤管理系统设计

考勤作为一个学校的基础管理,是对学生的个人出勤情况的依据。传统的考勤靠手工操作、纸质传递,这样的方式造成了考勤不全面、数据不准确和资料的共享程度低。因此学校需要一个可以适应大量信息控制和数据处理的考勤管理系统,用计算机的高效处…

MySQL做学生考勤系统_Jsp+Ssh+Mysql实现的Java Web学生考勤管理系统

JspSshMysql实现的Java Web学生考勤管理系统https://www.yuanlrc.com/product/details.html?pid164&fuid6666 实现了管理员、学生、教师三个角色的功能,其中管理员可以管理基本信息,如班级信息、课程信息、用户信息、课程表等。教师可以管理自己班级…

(附源码)ssm学生考勤管理系统 毕业设计 260952

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

C语言课程设计学生考勤管理系统

学生考勤管理系统 1、题目与要求 功能:设计一考勤系统。考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、学生学号、缺课类型(迟到、早退、请假及旷课)。系统具有以下功能&#xff1a…

C语言实现学生考勤管理系统

题目要求&#xff1a; 代码实现如下&#xff1a; 在这里插入代码片 #include<stdio.h> #include<stdlib.h> #include<string.h> int number;//全局变量&#xff0c;记录全部人的个数 //结构体&#xff0c;定义单个学生的信息 typedef struct student {i…

C++学生考勤管理系统报告

c课程设计学生考勤管理系统报告 1.需求分析 1.录入学生的缺课记录&#xff1b; 2&#xff0e;修改某个学生的缺课记录&#xff1b; 3&#xff0e;查询某个学生的缺课情况&#xff1b; 4&#xff0e;统计某段时间内&#xff0c;某门课旷课学生姓名及旷课次数&#xff0c;按旷课次…

学生考勤管理系统

学生考勤管理系统 学生考勤管理系统 背景分析&#xff1a; 随着高校校园信息化的逐步完善&#xff0c;有效地借助网络、数据库等技术提高工作和管理效率。如今针对师生的成绩查询系统、教务管理系统、招生就业系统、BBS、校园网站等系统在各大高校纷纷出现[1]&#xff0c;对全…

C语言课程设计——学生考勤管理系统

C语言课程设计——学生考勤管理系统 题目要求&#xff1a; 学生考勤管理系统设计 &#xff08;1&#xff09;问题描述 考勤信息记录了学生的缺课情况&#xff0c;它包括&#xff1a;缺课日期、第几节课、课程名称、学生姓名、缺课类型&#xff08;迟到、早退、请假及旷课&…