前端开发过程中,JS
内的内嵌函数可以访问外层函数的所有变量和函数,但是内嵌函数外部却并不能访问内嵌函数的内部变量及其内部的函数。这和JS
中的执行上下文环境有关,相关可参考《JS中如何理解执行上下文?》。
闭包是什么?
总结闭包的特点如下:
- 闭包内可访问其作用域内的所有函数、变量。
- 闭包作用域内,其外层函数无法访问,故其闭包内的变量在外层函数未释放时,其会一直保存在内存中。
如何实现闭包?
闭包的常见实现方式就是在一个函数内部创建另外一个函数,通过另外一个函数访问这个函数的局部变量,示例代码如下:
function fn(){
var times = 0;
var c = function() {
return ++times;
}
return c;
}
var count = fn();
console.log(count()); // 1
console.log(count()); // 2
console.log(count()); // 3
console.log(count()); // 4
如上通过闭包函数实现在全局作用域中访问局部变量times
,并让变量的值始终存储在内存中,需要注意的是由于定义一个变量count
用于指向fn函数的引用,所用在调用count()
执行完fn
函数后并不会销毁fn
的函数执行上下文,times
也会依然保存在内存中。