[JavaScript]认识 Closure(闭包)

前言

使用闭包时要注意:闭包虽然简单易用,但也会造成佔用记忆体的问题。因为会让函式执行完毕后,某些情况下,闭包的变数仍然无法释放记忆体,所以使用闭包时还是要谨慎小心。

闭包简短的定义

巢状的function就可能会发生闭包,闭包就是用内层去使用外层的物件

来看一个闭包的例子

function foo(){    let a =0;    function run(){        a++;        return a    }    return run;}var f = foo();console.log(f());

执行结果

f() //1f() //2f() //3

alt

上面程式码的大意:

我们来看函式foo定义了三件事:a = 0定义函式runreturn 函式run而函式run定义了两件事:a++return a

结果:每执行一次f(),a的结果就会加1

也就是closure发生了记忆体让内层a的值,不会被释放记忆

闭包本质上就是一个匿名函式

也因为程式码只执行传回函式

对foo()而言,内层的function run()是函式run()对f而言,内层的函式function run()是一个匿名函式function(){}
实际上,印出 f() 函式的範例中,建立了一个闭包(匿名函式),在执行传回函式run时这个匿名函式只做a++和return a,且即使foo()已经执行完毕,a变数依然是存活在传回的闭包範畴(记忆体)中。

重点

闭包将变数a本身关闭在自己的範畴(记忆体)中,而不是变数的值


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章