闭包:有权访问另一个函数作用域中变量的函数。抽象地来说,内部函数被保存到外部时,就会生产闭包
内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)
function outer() {
var a = "来自外部函数的数据";
return function inner() {
console.log(a)
}
}
var rs = outer()
rs()
闭包的特点
将操作的变量或对象隐藏起来,只允许特定的方法才能访问
定义一个计数器:
i
——全局变量名污染问题,全局变量可以修改i
——只在函数内部有效,函数调用完销毁,而且全局无法访问i
——全局可以访问,不会被随意修改 function count(){
var i=0;
return function () {
return ++i;
}
}
c1 = count();
console.log(c1()); //print1
console.log(c1()); //print2
c2 = count();
console.log(c2()); //print1
已运行结束的函数上下文中的变量对象继续留在内存中
参考文章
https://www.cnblogs.com/sharpest/p/11439763.html
https://blog.csdn.net/weixin_43586120/article/details/89456183
原文:https://www.cnblogs.com/zengbin13/p/12969560.html