1.如何产生闭包
当一个嵌套的内部子函数引用了嵌套的外部父函数的变量(函数)时,就产生了闭包
2.产生闭包的条件
*嵌套函数
*内部函数引用外部函数的数据(变量/函数)
*执行外部函数
3.
<script>
//将函数作为另一个函数的返回值
function fn1() {
var a = 2;
function fn2() {
a++;
console.log(a);
}
return fn2
}
var f = fn1();
f()
f()
</script>
返回fn2给fn1,在调用f的时候相当于在执行fn2
4.闭包的作用
使函数内部的变量在函数执行完成后,仍然存活在内存中
让函数外部可以操作(读写)到函数内部的数据(变量/函数)
5.通过立即执行匿名函数的方式隔离了作用域,当执行 arr[0] 函数的时候,arr[0] 函数的作用域链发生了改变
var arr = []
for(var i = 0; i < 10; i++){
arr[i] = (function (i) {
return function () {
console.log(i);
}
})(i)
}
arr[0](); // 0
arr[1](); // 1
arr[2](); // 2
arr[3](); // 3