1、理解
- 简单就是定义在一个函数内部的函数,可以使用其他函数的变量。
- 闭包是一种保护私有变量的机制,函数执行时形成私有作用域,保护私有变量不受外界影响。
- 内部函数可以使用外部函数的参数和变量,函数和变量不会被垃圾回收机制回收。
2、变量
- 变量:全局变量,任何地方可以访问;局部变量,作用域内访问。
- 函数内部声明的变量必须var声明,否则为全局变量。
全局变量
var count = 0;
function counter() {
return count += 1;
}
counter(); ---> count = 1
counter(); ---> count = 2
counter(); ---> count = 3
局部变量
function counter() {
var count = 0;
return count += 1;
}
counter()----> count = 1
counter()----> count = 1
counter()----> count = 1
3、闭包实现全局变量效果
var counter = (function(){
var count = 0;
return function() {
return count += 1;
}
})()
counter() ----> count = 1;
counter() ----> count = 2;
counter() ----> count = 3;
解析: 局部变量声明定义指进行一次,然后 counter 函数自我调用。
4、优缺点
- 优点:私有变量的存在;长期内存存储;避免全局污染。
- 缺点:内存浪费,常驻内存及其使用不当的无效内存增大内存使用量,导致内存泄漏。