当前位置: 首页 > 科技观察

一篇文章带你读懂JavaScript函数闭包

时间:2023-03-15 01:46:10 科技观察

大家好,我是前端进阶。JavaScript变量属于局部或全局范围,使用闭包使私有变量成为可能。1.全局变量函数可以访问函数内部定义的所有变量。functionmyFunction(){vara=4;returna*a;}但函数也可以访问函数外定义的变量。vara=4;//全局变量functionmyFunction(){returna*a;}在第一个例子中,a是局部变量..局部变量只能在定义的函数内部使用。全局变量可以被页面(和窗口)中的所有脚本使用(和更改),同名的全局变量和局部变量是不同的变量。修改一个而不是另一个。不使用关键字var创建的变量始终是全局变量,即使是在函数内创建的也是如此。二、变量的生命周期只要应用程序(窗口/网页)存在,全局变量就存在。局部变量的生命周期较短。它们在调用函数时创建,在函数完成时删除。3.为什么需要闭包?假设你想用一个变量来计算一些东西,你希望这个计数器对所有函数都是可用的。您可以使用一个全局变量和一个递增计数器的函数。此时需要关闭。示例:计数器Item

用全局变量计数

Count!0

注意:计数器仅由add()函数更改。问题是页面上的任何脚本都可以在不调用add()的情况下更改计数器,并且如果在函数中声明了计数器,则没有人可以在不调用add()的情况下更改它。functionadd(){varcounter=0;//局部变量counter+=1;}add();add();add();//计数器现在应该是3,但它不起作用!每次都会调用add()函数,并将计数器设置为1。4.JavaScript嵌套函数所有函数都可以访问全局作用域。事实上,在JavaScript中,所有函数都可以访问它们之外的变量。JavaScript支持嵌套函数。嵌套函数可以访问它们的上面(外部)范围。在示例中,内部函数plus()可以访问父函数中的计数器变量。functionadd(){varcounter=0;functionplus(){counter+=1;}plus();returncounter;}完整代码:项目

JavaScript嵌套函数

如果你可以从外部调用plus()函数,这或许可以解决摆脱counter的困境,还需要想办法只执行一次counter=0,需要闭包。5、JavaScript闭包自调用函数变量add赋自调用函数的返回值,自调用函数只运行一次。它将计数器设置为零(0)并返回函数表达式。varadd=(function(){varcounter=0;returnfunction(){returncounter+=1;}})();add();add();add();//counterisnow3所以add变成了一个函数。“很棒”的部分是它可以访问父作用域中的计数器。注意:这称为JavaScript闭包,它使函数可以拥有“私有”变量。计数器受匿名函数范围的保护,只能使用add函数进行修改。6.总结本文基于JavaScript基础。从函数的基本概念(变量和全局变量)。为什么函数需要闭包?使用闭包可以使私有变量成为可能。通过case(计数器)的解释,以及闭包在嵌套函数中的应用,我们可以更好的理解。丰富效果图的展示有助于更好地理解闭包的概念。希望它能帮助你更好地学习JavaScript。