很多关于JS的书籍例如《JavaScript权威指南》或者《高程》都把闭包解释的晦涩难懂,萌新们是怎么也看不懂啊!不过别怕,今天我就用很简单的方式给大家讲解下到底什么是闭包。这是一篇面对新手的对于闭包的解释,没有晦涩生硬的语句,一看就能明白。如有不妥欢迎指正!
要理解闭包,首先要理解变量的作用域。
JS中变量作用域有两个:全局变量以及局部变量,顾名思义,全局变量就是在任何位置都可以引用的变量,局部变量就是只能在特定位置才能引用的变量,看下面代码。
var globalScope="global scope"; function f(){ var localScope="local scope"; console.log(globalScope);//global scope } console.log(localScope);//undefined
在函数f()内可以访问到函数体外定义的globalScope,而在函数体外不能访问到函数体内定义的localScope,这就是全局变量与局部变量的区别。
难道在函数体外就永远访问不到localScope了吗?非也,闭包就是为此而生。
function f(){ var localScope="local scope"; return function(){ console.log(localScope); } } f()();//local scope
我们在函数f()外访问到了局部变量localScope,这里在函数f()内定义的匿名函数就是一个闭包!
已抢65529个
抢已抢30092个
抢已抢16440个
抢已抢8358个
抢已抢10787个
抢已抢22191个
抢