Web前端Javascript学习-JavaScript闭包函数详解
小职 2021-11-24 来源 : 阅读 2612 评论 0

摘要:本篇主要介绍了Web前端Javascript学习-JavaScript闭包函数详解,通过具体的内容展现,希望对大家web前端JavaScript的学习有一定的帮助。

本篇主要介绍了Web前端Javascript学习-JavaScript闭包函数详解,通过具体的内容展现,希望对大家web前端JavaScript的学习有一定的帮助。

Web前端Javascript学习-JavaScript闭包函数详解

闭包函数

变量作用域

要理解JavaScript闭包,就要先理解JavaScript的变量作用域。


变量的作用域有两种:全局的和局部的(全局变量和局部变量)


JavaScript中,在函数内部可以直接读取到全局变量。


var n=10

function fn(){

alert(n)

}

fn()      //10


而在函数外部无法读取到函数内部的变量。


function fn(){

var n=10;

}

fn()

alert(n)   //n is not defined    函数外部无法读取到函数内部的n


注意:函数内部使用var声明变量的时候,这个变量是局部变量,如果不使用var,那么这个变量就是一个全局变量。


例如:


function fn(){

n=10;

}

fn()

alert(n)   //10


另外,函数的参数也是局部性的,只在函数内部起作用。


在正常情况下,我们是无法得到函数内部的局部变量的,只有变通方法才可以——在函数内部再声明一个函数。


function f1(){

var n=10;

function f2(){

alert(n)

}

}


f2函数可以得到f1函数内的所有局部变量,但是f1函数却无法得到f2函数内部的局部变量——JavaScript语言特有的“链式作用域”结构。(即子对象会一级一级地向上寻找所有父对象的变量),所以,父对象的所有变量,对于子对象都是可见的。


f2函数可以获取到父级函数f1的局部变量,那么如果把f2()函数返回,在函数f1外部就可以访问到f1()函数内部的变量了。


例如:


function f1(){

var n=10;

function f2(){

alert(n)

}

return f2()

}

f1()           //页面弹出10


例子中的f2()函数就是一个闭包函数。


闭包的概念

由于作用域原因,我们无法在函数外访问函数里面定义的变量,但有事我们又有这个需求,因此就出现了闭包的概念。


闭包是指有权访问另一个函数作用域中的变量的函数。


在上面的例子中,内部函数f2就是一个闭包函数。


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


闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。


闭包的用途

(1)可以读取父级作用域函数内部的变量;


(2)让变量的值始终保存在内存中(让局部变量变成全局变量),不被垃圾回收机制清除。


闭包的缺点

由于闭包会使函数中的变量都保存到内存中,垃圾回收机制不清理,内存消耗很大,所以不能滥用闭包,否则可能导致内存泄漏。


补充:


什么是内存泄漏?


程序的运行都是需要内存的。只要对内存提出要求,操作系统必须供给内存。

当应用程序中的一些代码变量不再需要用到内存时,但是没有被操作系统或者可用内存池回收,就说明它发生了内存泄漏。


即,当已经不再需要某块内存时,这块内存还存在着——内存泄漏


解决闭包引起的内存泄漏的问题:


在退出函数之前,将不使用的局部变量全部删除。


例如:将当前变量的值设置为‘null’,当垃圾回收机制启动时,会自动对这些值为‘null’的变量回收。


✅  扫码免费获取基础课程·答疑解惑·职业测评

Web前端Javascript学习-JavaScript闭包函数详解

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved