/* 一个函数内部其实就是一个闭包 可以理解为封闭的空间 局部空间 */
/* 简单的闭包是指函数可以使用函数之外定义的变量 */
/* function fn(){
let num = 1;
}
alert(num) */
/* 通过这种方式就可以拿到 函数内部的变量 这种方式就做通过闭包的方式*/
/* function fn1(){
let num = 1
return function fn2(){
alert(num)
}
}
let fn = fn1();
fn(); */
/* 闭包可以拿到函数内部定义变量 */
/* function fn1(){
let num = 1
return function fn2(){
return num
}
}
let fn = fn1();
let val = fn();
alert(val) */
/*
代码中的内部函数(f2)就是闭包
闭包就是能够读取其他函数内部变量的函数
可以把闭包简单理解成"定义在一个函数内部的函数"
是将函数内部和函数外部连接起来的一座桥梁
闭包的用途
可以读取函数内部的变量
让这些变量的值始终保持在内存中
闭包的缺点
闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
闭包会在父函数外部,改变父函数内部变量的值
*/
/* 闭包会在父函数外部,改变父函数内部变量的值 */
let allFn;
function fn(){
let n = 0;
allFn = function(){
n++;
}
return function (){
alert(n)
}
}
let ff = fn();
ff();
allFn();
ff();
allFn();
ff();
/* 换了一种写法 */
/* let fn = function (){
alert('fn')
}
fn(); */