首页 > 其他分享 >js闭包

js闭包

时间:2023-08-24 17:36:13浏览次数:32  
标签:闭包 函数 bFunction js 内存 aFunction 变量

一,闭包是什么
闭包是:函数内部和函数外部连接的桥梁;可以读取其他函数内变量的函数;
可以访问外部函数的变量,并将这些变量保存在内存中,供内部函数在外部函数执行完毕后继续使用;
常被用于工厂函数、模块化等场景。

二,闭包优缺
优点:①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突; ②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存);③匿名自执行函数可以减少内存消耗 
缺点:①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null; ②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响 

三,闭包示例

1.函数赋值
function aFunction(){
  let aName = 'hello';
  function bFunction(){
     //处理数据
     console.log(aName)      
  }         
  return bFunction;  
}
var c = aFunction()
c(); // 输出:hello
在这个例子中,aFunction是外部函数,它声明了一个变量aName。内部函数bFunction可以访问外部函数的aName变量,并在执行时输出该变量的值。
aFunction执行后返回了bFunction,此时bFunction仍然可以访问到aName。这就是一个简单的闭包示例。
2.返回值
function aFunction(){
var name = 'hello'
return function (){return name}
}
aFunction();//输出:hello
3.循环赋值(定时器与闭包)
let块级作用域,每次迭代都会声明
for(let i= 1;i<10;i++){
setTimeout(
function(){//打印i}
,1000);
}

 

标签:闭包,函数,bFunction,js,内存,aFunction,变量
From: https://www.cnblogs.com/alizhi/p/17654631.html

相关文章

  • js下载媒体文件(分片下载)
    html:<divclass="usnbox"><divclass="usnboxbodyusnboxbody_rtm"><divclass="layui-form-item"><divclass="layui-inline"><la......
  • js面向对象编程
    基本概念面向对象编程将一个系统抽象为许多对象的集合,每一个对象代表了这个系统的特定方面。对象包括函数(方法)和数据。一个对象可以向其他部分的代码提供一个公共接口,而其他部分的代码可以通过公共接口执行该对象的特定操作,系统的其他部分不需要关心对象内部是如何完成任务的,这样......
  • js实现大文件上传下载
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • Electron,VUEJS3,Vite,TypesSript 开发环境配置
    Electron,VUEJS3,Vite,TypesSript开发环境配置项目早期是vue3+vite开发的,后期由于运营需求,要修改为Win安装包。方案还是比较多的:1.WPF-Webview由于目前只需要兼容win,所以可以选择WPF,但WPF需要WebView的,还需要本地架设服务。整体部署比较复杂以及需要熟悉C#与WPF相关开发。2.......
  • jsp实现大文件上传下载
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • java裁切NC文件并转成Json
    importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importorg.junit.Test;importucar.ma2.Index;importucar.nc2.NetcdfFile;importucar.ma2.Array;importjava.io.FileWriter;importjava.io.IOException;publicclassNetCDF2JS......
  • kettle引入外部js
    //自带的函数参数即为js的路径LoadScriptFile("F:/bigdata-etl/user_center_auto/USER/aes.js");varAESPHONE=PHONE;vardecTel=aesDecrypt(AESPHONE,"ksu7gk4H7Gs9362F")functionaesDecrypt(str,key){varresult_value;try{......
  • 直播商城源码,JS Date配置日期格式化
    直播商城源码,JSDate配置日期格式化引入jsDate配置化diamante Date.prototype.format=function(fmt){  varo={    "M+":this.getMonth()+1,         //月份    "d+":this.getDate(),          //日  ......
  • js全选反选 很重要的 很简洁的 必须掌握的
    <html><head><style>*{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;border:1pxsolid#c0c0c0;......
  • zip.js
    functiongetUrlVar(variable){varquery=window.location.search.substring(1);varvars=query.split("&");for(vari=0;i<vars.length;i++){varpair=vars[i].split("=");if(pair[0]==variable){re......