js之闭包问题
闭包
闭包:在一个函数外部能够访问函数内部变量(局部变量,自由变量)的函数
function foo(){
var i = 0;
function bar(){
var a = i++;
console.log(a);
}
bar();
}
//闭包的存在
var baz = foo();
console.log(baz);
baz();
baz();
闭包可以创建命名空间,避免重名变量出错
垃圾回收是为了释放内存空间的 标记清除 引用计数
垃圾回收机制,这个博主写的挺好的,地址:https://www.cnblogs.com/andy-zcx/p/5522836.html
内存泄露 :是一块内存既不能使用了,也不能被销毁
记录一个闭包面试题:
function fun(n,o){
console.log(o);
return {
fun: function(m){
return fun(m, n);
}};}
var b = fun(0).fun(1).fun(2).fun(3);
/*执行过程
*fun(0) n=0,o=undefined 返回{fun:function(m){return fun(m,n)}}
* m=1,n=0 fun(1,0) n=1,o=0 返回{fun:function(m){return fun(m,n)}}
* m=2,n=1 fun(2,1) n=2,o=1返回{fun:function(m){return fun(m,n)}}
* m=3,n=2 fun(3,2) n=3,o=2 返回{fun:function(m){return fun(m,n)}}
* */
来源:https://blog.csdn.net/qq_41517265/article/details/99694416