不知道为什么,看到闭包这两个字感觉贼亲切,哈哈哈。
闭包
- 闭包的概念(简单粗暴形象点):
函数中内嵌另一个函数,或者是一个函数中有另一个对象,里面的函数或者是对象都可以使用外面函数中定义的变量或者是数据,此时就形成了闭包。
(什么还是不懂?感慨自己智商感人,索性再写的大白话点,让自己对闭包有个好点的认识。函数A中,有一个函数B,函数B中可以访问函数A中定义的变量或者数据,此时就形成了闭包。)
- 闭包的模式(两种):函数模式的闭包、对象模式的闭包
- 闭包的作用:
缓存数据,延长作用域链,优点也是缺点,闭包会导致原有作用域链不释放,造成内存泄露。(局部变量是在函数中,函数使用结束后局部变量就会被自动释放,闭包后里面的局部变量的使用作用域链就会被延长)
(下面就上两个小栗子)
小栗子1:
function f1(){
var num = 10;//缓存数据
return function(){
num++;
return num;
}
}
var ff = f1();
console.log(ff());//11
console.log(ff());//12
console.log(ff());//13
小栗子2:
//闭包的方式产生相同的随机数
function f1(){
var num = parseInt(Math.random() * 10 + 1);
return function () {
console.log(num);
}
}
var ff = f1();
ff();//7
ff();//7
ff();//7
//答案数字随机(1-10);