JS闭包

网友投稿 520 2022-05-30

JS闭包

# JS闭包

闭包概念

能够读取其他函数内部变量的函数

定义在一个函数内部的函数,内部函数持有外部函数内变量的引用

简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数,但并不仅仅是一个函数,它是一个环境,这个环境中保存了一些相关的数据及指针引用。

变量作用域

两种:全局变量、局部变量。js中函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。

为什么需要

局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染

何时使用?

变量既想反复使用,又想避免全局污染

用法

定义外层函数,封装被保护的局部变量

定义内层函数,执行对外部函数变量的操作

外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中

从外部读取函数内部的变量

function f1(){

var n = 123;

function f2(){ //f2是一个闭包

alert(n)

}

return f2;

}

js链式作用域:子对象会一级一级向上寻找所有父对象的变量,反之不行。

f2可以读取f1中的变量,只要把f2作为返回值,就可以在f1外读取f1内部变量

用途

读取函数内部的变量

让这些变量的值始终保持在内存中。不会再f1调用后被自动清除

方便调用上下文的局部变量。利于代码封装

原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束后,被垃圾回收机制回收

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一统江湖的大前端(7)React.js-从开发者到工程师
下一篇:【精选单品】优学院平台丨混合式教学管理平台
相关文章