当前位置: 首页 > Web前端 > JavaScript

JavaScript闭包_1

时间:2023-03-27 16:22:22 JavaScript

闭包的原因:调用外层函数后,外层函数的作用域对象被内层函数引用,无法释放,形成闭包对象。闭包的缺点:闭包比普通函数占用更多的内存——(外部函数的作用域对象)什么时候使用闭包:当重用数据又不想污染全局作用域时。如何释放闭包:一旦不再使用闭包,就应该尽快释放它!如:child=null例:定义一个函数,为孩子保留零花钱:孩子每次花钱,从总金额中减去花掉的钱,提示余额。问题:比如,总额为1000元,存放在哪里?要么就是全局的情况:虽然可以实现功能,但是极其容易被篡改!闭包3步:1.定义外层函数包裹被保护变量和内层函数functionparents(){//在外层函数parent中定义被保护变量vartotal=1000;//2。外层函数将内层函数返回给外部//给子函数returnfunction(money){//要么有一部分:虽然不会被篡改,但是不能重复使用total-=money;console.log(`花费了${money},还有${total}元`)}}//强调:函数只有被调用才能执行,并且可以得到返回结果//3.调用者必须调用外层函数才能获得函数返回的内层函数。varchildren=parents();//花了100个children(100);//我希望还剩下900个(注:别人写的代码不一定能篡改我的变量)//又花了100个children(100);//Ihope800left//又花了100children(100);//Ihope700left图(图是东哥画的):1.创建父保护变量和内部函数2.返回函数创建一个作用域链,指向父函数的作用域链,父函数的作用域链不能释放3.当子指向等于null时,子的作用域链可以释放,闭包可以被发布