首页 > 其他分享 >关于js闭包的基础理解

关于js闭包的基础理解

时间:2022-09-21 09:23:52浏览次数:57  
标签:闭包 函数 js 理解 numRise numUp 全局变量 fn

闭包

    拿一个可以记录函数调用次数的来进行理解,如下方

let n = 0
function numUp(){
    n++
    console.log(n)        
}
const fn = numUp()
fn() // n=1
fn() // n=2
n+=10
fn() // n=13

    很明显可以发现,我们定义了一个全局变量n来记录numUp函数的调用次数,但是全局变量n在遭到numUp函数之外的改变后,n并不能正确的反映出numUp函数的调用次数,因此我们需要引用闭包的概念

function numUp(){
    let n=0
    function numRise(){
    n++
    console.log(n)
}
    return numRise
}
const fn = numUp()
fn() // n=1
fn() // n=2
n+=10
fn() // n=3

  不难发现当我们使用了闭包也就是函数嵌套的形式去记录函数调用的次数时,则不会在受到函数之外的程序的干扰,其核心就在于实现了数据的私有制,函数外部只能使用私有数据,而不能修改私有数据,因此该类数据可以完完全全地被正确的使用。

  但闭包也会引起内存泄露,众所周知,全局变量是不会被销毁的(除非关闭页面),而一般来说一个普通的函数在使用后自身以及自身内部的临时变量(局部变量)都会被销毁,但是在上述闭包形式的写法中,我们定义了一个全局变量fn来引用函数numUp,而numUp函数返回值为内部函数numRise,而numRise内部又可以找到外部变量n,因此此时的n将不会被回收销毁,因此在此处引起了内存泄露。

标签:闭包,函数,js,理解,numRise,numUp,全局变量,fn
From: https://www.cnblogs.com/baiChi-YP/p/16714413.html

相关文章

  • 前端Nodejs-Day35
    创建web服务器:①导入http模块:require导入②创建web服务器实例:调用http.createServer()方法  ③为服务器绑定request事件:使用on方法绑定 ④启动服务器:.lis......
  • SpringIOC的理解
    IOC(InversionOfControl):控制反转控制:即对资源(如一个Java类)的获取方式获取方式可以分为两种主动获取在Spring之前我们想要获取一个类都是自己创建,即new出这个类......
  • Node.js(七)MySql+ajax
    Api.jsconstexpress=require("express");constrouter=express.Router();constmysql=require('mysql')constmysqlutil=require("./mysql");letpool=mysql.cre......
  • Vue中使用js-audio-recorder实现录音时提示:浏览器不支持getUserMedia!
    场景Vue中使用js-audio-recorder插件实现录音功能并实现上传Blob数据到SpringBoot后台接口:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126957202上面......
  • Node.js(六)MongoDB
    student.jsvarexpress=require('express');varrouter=express.Router();const_=require("lodash");const{MongoClient}=require("mongodb");//依赖Mong......
  • 一对多,多对一,多对多的理解
    对一是对象对多是集合一个班级下可以有多名学生  班级一对多名学生一个学生只能有一个班级,一个学生不能有多个班级,所以这里是一对多  班级一对多名学生而多对......
  • js generate ASCII table dict All In One
    jsgenerateASCIItabledictAllInOneASCIItabledictgeneratorcharCodeAt&String.fromCodePoint//jsgenerator&ASCIItabledictconstdict={};......
  • 昨天学习:宏任务与微任务,JS执行机制,执行栈,事件循环,同步异步执行顺序
    宏任务由宿主(浏览器,Node)发起;微任务由JS本身发起。宏任务的具体事件为scrpit(整体代码),setTimeout,setInterval,等。微任务的具体事件为Promise,等。JS执行机制:先处理主线程上......
  • nodejs抓取接口数据(axios)
     demo:varaxios=require("axios");varfs=require("fs");varnodeschedule=require("node-schedule");varhotListUrl="https://weibo.com/ajax/side/hotS......
  • Node.js 面试题 All In One
    Node.js面试题AllInOneNode.js应用领域BFFCLI前端基建工具库爬虫BFFPattern:BackendsForFrontends用于前端的后端模式https://samnewman.io/patterns/......