JavaScript ,js闭包函数的理解(2024-05-06)

本文详细解释了闭包函数的概念,包括其执行原理、如何创建和使用闭包,以及闭包的特点(如内存占用和持久性)和潜在问题(内存泄漏)。讨论了闭包在保护变量和避免全局污染中的作用,以及正确的闭包用法策略。

闭包函数是一种函数的使用方式。

// 闭包函数执行
let add = (function () {
    let counter = 0;
    return function () {
        return counter += 1;
    }
})();
 
add();  // counter = 1
add();  // counter = 2
add();  // counter = 3
 

//对比正常的执行函数
let edit = (function () {
    let counter = 0;
    return counter += 1;
})();
 
edit();  // counter = 1
edit();  // counter = 1
edit();  // counter = 1

变量 add 指定了函数自我调用的返回字值。

自我调用函数只执行一次。设置计数器counter = 0。并返回函数表达式。

add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。

这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。

计数器受匿名函数的作用域保护,只能通过 add 方法修改。

// 主动编写的闭包
let fnn = null;
function fn(){
    let count = 10;
    fnn = function(){
        count++;
        debugger
    }
}
fn();
fnn();   //调用形成闭包  count = 11
fnn();   //调用形成闭包  count = 12

 两次调用fnn() ,闭包函数

 

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

直观的说就是形成一个不销毁的栈环境。

闭包形成后,会导致父函数的内存空间暂存,即使父函数调用完也不会 被销毁滥用、多用闭包会导致,内存空间被消耗,引起应用卡顿,严重的可导致 内存溢出

 

闭包作用:局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染。延伸变量的作用范围。

 闭包特点:占用更多内存;不容易被释放

 闭包用法:变量既想反复使用,又想避免全局污染如何使用?

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值