闭包是指存在自由变量的函数!
1)是一个函数
2)函数里有一个自由变量,该变量不是在当前函数里面声明。
在A作用域中使用的变量a,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,a就是一个自由变量。如下代码
示例1:
var a = 10
function fn(){
var b = 20
console.log(a + b)
}
示例2:
function a(x, y){
console.log(x, y) //在这里,x和y都不是自由变量
function b(){
console.log(x, y) //但在这个内部函数b中,x和y相对于b都是自由变量,而函数a的作用域则是环境。
}
//无论b最终是否会作为返回值被函数a返回,b本身都已经形成了闭包。
}
示例3:
函数可以记住并访问所在的词法作用域
function a () {
let value = 2;
function b () {
return value += 2; // 对value局部变量进行累加
}
return b;
}
const fn = a();
console.log(fn()); // 4
console.log(fn()); // 6
console.log(fn()); // 8
优点:1、避免全局变量污染。2、缓存变量
缺点:容易造成内存泄漏
原文出处:http://www.dongblog.com/notes/50.html
来源:博客网 转载请注明出处!