闭包是指一个函数或一个函数的引用与一个引用环境(外层函数)绑定在一起,而这个环境存储着该函数的每一个非局部变量(也就是这些变量不在该函数内部,而是在外层函数)的表
闭包就是在函数里返回一个函数,内层函数引用着外层函数的变量,所以不会被释放掉,一直保存着该变量改变后的值,并且在外面用一个变量接着所返回的函数就可以使用内层函数并传参啦,
场合:需要反复使用一个函数
如下例子:
function parent(){
var total=1000;
return function(money){
total-=money;
console.log(total);
}
}
var pay = parent();
pay(100);
pay(100);
pay(100);
函数外部不能访问函数内部的变量,而很多时候是需要访问函数内部的变量的,因此就需要用到闭包,原理如下:
上面图片展示的就是:函数内部再定义一个函数用于获取这个变量,然后返回这个函数,这样就相当于外部函数返回自身的变量,再把外部函数赋给一个变量,这样在最外部就能接受到外部函数的变量了。
这样就可以访问func函数内的num了,因此调用result后,输出结果为999
因为有两个函数所以调用的时候也要写两个括号
内部函数是闭包,所以闭包就是将函数内部和函数外部连接起来的一座桥梁
https://www.cnblogs.com/cxying93/p/6103375.html
调用result输出为999;
调用nAdd后num为1000,但没有打印出来,存在内存中
再调用result打印结果为1000
过程解析:
1、obj.getNameFunc打印结果为getNameFunc的属性值,也就是冒号后面的全部内容
2、obj.getNameFunc()打印结果为闭包内容,也就是
3、obj.getNameFunc打印结果为the window,因为从上面学习中知道,无论这个闭包存在哪里,闭包里的this均指向了window,所以打印出来的是全局变量name
闭包常用于银行的接口转账
把一个函数赋给一个变量时,这个变量就变成了一个函数,因此如上所述,zhuanzhang后面要加()
总的来说闭包用途就是保护重要的东西,除了上面的钱还阔以是指纹等重要信息,这样就可以实现通过层层验证才能转账