js闭包
(js的特殊之处在于 函数内部可以直接读取全局变量,而在函数外部无法读取函数内部的变量,那在函数外部怎么读取到函数内部的变量呢?这就用到了闭包)
闭包的特点:1、读取函数内部的变量。
2、让这些变量始终保存在内存当中
闭包的两个典型的应用场景:
1、使用一个函数访问另一个函数的局部变量。(函数作为返回值)
2、通过回调函数使用一个函数中的局部变量。(函数作为参数被传递)
第一种应用场景举例:
函数作为返回值
function box() {
var count = 1; //局部变量,当函数调用完毕后,它占用的内存就会自动回收
var a = 1; //局部变量,如果局部变量被闭包使用了,这个变量就相当与全局变量,不会被内存回收
function fn() {
console.log(a);
}
return fn;
}
var b = box(); //b就是fn函数,就是闭包。在调用box的时候,box返回了fn,而fn函数又返回了box函数的局部变量a
b(); //调用b就相当于调用fn //1
第二种应用场景举例:
通过回调函数
function box(callback){
var a = 100;
//调用回调函数,把box的局部变量传进去
callback(a);
}
//定义一个回调函数 传一个参数
function number(a){
console.log(a)
}
//调用box函数 把回调函数传进去 //这样调用box函数时就能拿到box的局部变量
box(number); //100