关于闭包的问题
来源:2-5 闭包
迷失的小麦
2019-12-30 12:59:42
1.我只理解访问局部变量,其他3点麻烦举例解释?
function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c=a();
c();
2.为什么不直接a(),而要a()(),没看懂?
1回答
同学你好,关于同学的问题解答如下:
1、通常情况下,写一个普通的函数,函数执行完毕就会销毁,所以函数内部的变量也就随之销毁了。闭包的封装性好意思就是,函数内部的子函数被外界使用,使其所在的作用域保存下来不会被销毁,它里面的局部变量也就保存下来了。
例如如下,a函数返回值为子函数b,调用a()返回的就是子函数b,所以全局变量c实际上赋值的就是b 。由于全局变量在代码运行的整个过程中都不会销毁,它使用到的值,也就是子函数b被保存下来了(即子函数被外界的全局变量c使用)。所以子函数b所在的作用域函数a被保存下来了。
2、因为如果产生了闭包,那么闭包内产生的变量就不会自动进行销毁,所以就导致了内存占用浪费。
3、内存泄漏是指程序中己动态分配的内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。而闭包就是自己内部的变量不会自动释放,一直占用着内存,会造成内存泄漏。
4、在同学给的代码里面,执行a()以后,函数有一个返回值是b,b是一个函数,而函数在不调用的情况下是不会执行的,所以a后面有两个括号a()()就相当于a()执行完是b,再执行b()。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~