面试问题:什么是闭包

主流双目相机技术参数横向评测:从ZED到国产新锐 本文对主流双目相机技术参数进行了横向评测,涵盖ZED、Bumblebee等国际品牌及国产新锐产品。详细分析了分辨率、帧率、视场角等关键参数,并针对机器人导航、AR/VR交互、工业检测等场景提供选型建议。特别推荐ZED相机在科研领域的成熟应用,以及国产方案在长基线设计和主动双目技术上的创新突破。 阅读详情

什么是闭包?闭包的优缺点?

闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。

1、变量作用域

要理解闭包,首先要理解javascript的特殊的变量作用域。

变量的作用域无非就两种:全局变量和局部变量。

javascript语言的特别之处就在于:函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。

注意点:在函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明的是一个全局变量!

2、如何从外部读取函数内部的局部变量?

出于种种原因,我们有时候需要获取到函数内部的局部变量。但是,上面已经说过了,正常情况下,这是办不到的!只有通过变通的方法才能实现。

那就是在函数内部,再定义一个函数。

function f1(){

    var n=999;

    function f2(){
      alert(n); // 999
    }

  }

在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。

这就是Javascript语言特有的"链式作用域"结构(chain scope),

子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!

3、闭包的概念

上面代码中的f2函数,就是闭包。

各种专业文献的闭包定义都非常抽象,我的理解是: 闭包就是能够读取其他函数内部变量的函数。

由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。

所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

 4、闭包的用途

闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在f1调用后被自动清除。

为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

这段代码中另一个值得注意的地方,就是"nAdd=function(){n+=1}"这一行,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。

5、使用闭包的注意点

(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

 

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案? 本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。 阅读详情

相关推荐

R语言笔记三:矩阵、数组、列表和数据框

1.矩阵        矩阵是二维的,需要有行和列。向量是一维的。        在R软件中,矩阵是有维数的向量,这里的矩阵元素可以是数值型、字符型或者逻辑型,但是每个元素必须拥有相同的模式,这个和向量一致。 (1)创建矩阵: m <- matrix(1:20,4,5) 行数和列数的分配必须满足分配条件。若分配的行列过大,分配的元素不足够,则报错。 m <-

weixin_44384631的博客 6211

面试题:什么是闭包?

简单理解:闭包 = 内层函数 + 外层函数的变量。

Lily的博客 415

利用GPAC生成MP4文件

GPAC主要针对学生和内容创作者,代表了一个跨平台的多媒体框架,开发人员可以使用它在 LGPL 许可下制作开源媒体。GPAC多媒体框架兼容范围广泛的流行文件类型,从常见格式(如 AVI、MPEG 和 MOV)到复杂格式(如 MPEG-4 系统或 VRML/X3D)和 360 电影。

深之JohnChen的专栏 1772

面试题:什么是闭包

比较好的答法: 1、讲讲这个技术 2、说说它的原理:它的好处 它的不好之处和代替方案 3、讲一讲个人更深的见解 1、闭包就是一个由作用域的代码块,比如一个全局函数或者一个事件的监听器或者一个回调函数或者一个函数内部返回值的函数都可以算是闭包 2、在前端开发中,闭包常常有一些使用场景 2.1 我们团队开发时 常常会写很多变量名 可能会出现变量重名导致业务冲突,为了解决这个问题 可以使用闭包,利用闭包是一个有作用域的功能来,把每一个业务的代码写在闭包中,闭包声明在闭...

solitor0的博客 2793

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1178

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输与原子云对接

本文详细介绍了如何利用立创·庐山派K230开发板与ATK-ESP8266模块实现图像识别数据的无线传输及与原子云平台的对接。通过硬件连接、环境配置、代码实现及调试技巧的讲解,为开发者提供了一套完整的物联网解决方案,特别适用于智能监控和边缘计算场景。

study的专栏 951

闭包

闭包 1. 如何产生闭包(closure) 上图代码: // 函数作为返回值 function create() { const a = 100 return function () { console.log(a) } } const fn = create() const a = 200 fn() // 100 // 函数作为参数被传递 function print(fn) { const a = 200 fn() } const a =

WLIULIANBO的博客 486

【数据集8】全球人口数据WorldPop详解

全球人口数据WorldPop详解

WW、forever的博客 7882

什么是闭包?(前端面试题系列)

什么是闭包?(前端面试题系列)

hjp991028的博客 589

用 SAP-ABAP-1 把 ABAP 代码理解这件事交给 AI:从遗留代码到 ABAP Cloud 的开发加速器

SAP-ABAP-1是SAP推出的首个专用ABAP基础模型,专注于理解和解释ABAP代码,帮助开发者更快迁移和维护遗留系统。它强调ABAP Cloud合规编码实践,通过SAP AI Foundation提供访问,主要能力包括代码解释、业务语义理解和框架约束分析。相比通用模型,它能更好处理ABAP特有的版本差异、权限控制和扩展边界等问题。该模型可集成到多种开发环境中,支持文件化开发体验,并能与SAP Joule等工具协同工作,为ABAP团队提供智能辅助。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3827

风-车-桥耦合随机振动预测框架:从物理模型到高效代理

本文提出了一种风-车-桥耦合随机振动预测的混合框架,结合物理模型与代理模型实现高效计算。该框架的核心数学本质是时变参数-随机激励-高维动力系统,主要解决三大计算难点:自由度规模悬殊、时变特性和随机性传播。系统采用分层解耦-代理加速的技术路线,底层基于物理模型建立车辆运动方程和桥梁运动方程,上层通过深度学习代理实现随机激励到响应的端到端映射。文中详细介绍了随机激励建模(包括脉动风速和路面不平度)、子系统建模、耦合求解方法,并提供了可运行的Python代码实现。该框架可显著提高风-车-桥系统随机振动分析的效率,

huanghm88的专栏 103

JS面试题之---解释一下什么是闭包?

闭包是一个函数,它能够访问并引用其外部函数作用域中的变量,即使外部函数已经执行完毕。这种特性使得闭包可以保持对外部变量的引用,从而在函数外部也能访问和修改这些变量。

peachban的博客 1164

21天教你学会PCIe专栏(14)--安全性考虑

1.1 定义安全性(Security):安全性是指保护系统免受未经授权的访问、攻击和破坏,确保数据的机密性、完整性和可用性。1.2 重要性数据保护:保护敏感数据,防止数据泄露和篡改。系统防护:防止恶意攻击,确保系统的稳定性和可靠性。合规性:满足行业标准和法律法规的要求,避免法律风险。用户信任:提高用户对系统的信任度,增强市场竞争力。通过今天的学习,你应该对PCIe安全性的重要性和常见威胁有了深入的了解,掌握了实施安全措施的方法和工具,以及安全开发的最佳实践。

xiaoheshang_123的博客 850

js高级篇:什么是闭包?闭包有什么用?面试时如何处理闭包问题?

须知:我们在学一个新的东西的时候,例如我们第一次见到电饭煲,我们要知道什么是电饭煲(定义),知道电饭煲有什么用(作用),知道电饭煲怎么用(用法),如何用电饭煲煮一顿好吃的饭(实践),做出来之后你就真正懂了电饭煲。学习闭包的过程亦是如此,所以我们不用害怕学习新事物! 闭包专题1.闭包的定义2.闭包的作用3.闭包的用法4.闭包的应用5.经典面试题6.闭包的缺点 1.闭包的定义 定义:闭包是指有权访问...

weixin_44823731的博客 5815

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

面试常见问题:你是怎么理解闭包的?闭包有哪些好处?

面试中的一个常见问题。

canxuezhang的博客 2210

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

面试题4:Js中什么是闭包?闭包的作用?闭包的应用?闭包会造成的问题?

面试官:什么是闭包?闭包的作用?闭包的应用?⭐⭐⭐⭐⭐ 答: 函数执行,形成私有的执行上下文,使内部私有变量不受外界干扰,起到保护和保存的作用 作用: 保护 避免命名冲突 保存 解决循环绑定引发的索引问题变量不会销毁可以使用函数内部的变量,使变量不会被垃圾回收机制回收 应用: 设计模式中的单例模式 for循环中的保留i的操作 防抖和节流 函数柯里化 缺点 会出现内存泄漏的问题 ...

qq_51066068的博客 582

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

​一个基本的面试问题:可以解释一下什么是闭包吗?

全文共3379字,预计学习时长10分钟来源:Pexels面对面试问题,我们总是如临大敌。令人憎恶的面试问题之前,我参加了一个面试,其中工程团队要求我解释闭包的含义。当然,这不是我第一...

读芯术的博客 999

JavaScript面试宝典:50个必考闭包与作用域问题

🚀 准备好征服JavaScript面试了吗?闭包和作用域是每个前端开发者必须掌握的核心概念,也是面试官最爱考察的难点之一。本文将为你提供**终极指南**,帮助你彻底理解这些概念,轻松应对面试挑战!✨ 闭包和作用域是JavaScript中**最重要的基础概念**之一,它们直接关系到代码的执行结果和内存管理。在JavaScript面试中,超过80%的技术问题都会涉及这两个主题。无论你是初学者还是有

gitblog_00605的博客 775

面试必问问题:手写一个闭包,打印闭包返回值

面试:手写一个闭包

weixin_44191250的博客 458

面试总结: 闭包相关问题与继承相关的问题

一、闭包 闭包的概念:就是能够读取其他函数内部变量的函数 闭包的用处:1.读取函数内部的变量2.让这些变量的值始终保存在内存中 闭包的缺点:1.造成内存的泄露。 二、继承 1.原型链继承2.借用构造函数继承3.组合继承4.原形式继承5.寄生式继承6.寄生组合式继承 借用构造函数 思想:在子类型构造函数的内部调用超类型构造函数 如:function SuperType(name){ ...

mrhuanhuan的博客 286

前端面试必问:闭包(Closure)的核心要点与高频问题解析

闭包(Closure)是指一个函数能够记住并访问其词法作用域(lexical scope),即使该函数在其词法作用域之外执行。简单来说,当一个函数内部定义了另一个函数,且内部函数引用了外部函数的变量时,闭包就产生了。优点缺点封装私有变量内存泄漏风险延长变量生命周期过度使用影响性能实现模块化与高阶函数调试复杂度增加。

m0_73659339的博客 628

Web前端最新JavaScript进阶(十一):闭包学习进阶,护士15个经典面试问题

所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

2401_84447112的博客 1197

前端基础进阶(六)-大厂面试题问题:循环闭包与setTimeout

我在上一篇闭包的文章中留下了一个关于setTimeout与循环闭包的思考题. 利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5 for (var i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i); }, i * 1000); } 下面是一些朋友看了闭包以后给出了...

qq_43623970的博客 311

settimeout 参数_前端基础进阶(六)-大厂面试题问题:循环闭包与setTimeout

我在上一篇闭包的文章中留下了一个关于setTimeout与循环闭包的思考题.利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5for (var i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i); }, i * 1000);}下面是一些朋友看了闭包以后给出了的一些题,他们在看了...

weixin_39637700的博客 202

JavaScript:函数(包括经典面试题-IIFE和作用域链、闭包等问题)

目录 函数 1.函数介绍 2.函数声明 函数声明 函数表达式 3.函数内部属性 arguments this 方法中的 this 单独使用 this 函数中使用 this(默认) 事件中的 this 显式函数绑定 4.IIFE IIFE的写法 IIFE的基本使用 案列-经典面试题-IIFE 为什么需要IIFE? 5.作用域 案例 作用域链 综合案例-作用域链-闭包-经典面试题 6.函数调用 bind(执行环境...

qq_51066068的博客 356

前端提高篇(十九)JS进阶14闭包

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以领取。终点的,也是学不完的,最重要的是活着、不秃。

2401_84092068的博客 668
上一篇: Istio 1.0 正式版发布,可用于生产环境!
下一篇: 面试问题:哪些html元素支持跨域
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值