闭包 素颜马尾好姑娘i 2022-06-09 09:20 217阅读 0赞 ## 1、定义: ## 当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包 function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3 var d = A(); d();//1 d();//2 for(var i=1;i<=3;i++){ setTimeout((function(){ var j=i; return function(){ console.log(j); }; })(),0); } //1 //2 //3 ## 2、调用方式: ## function fun(n, o){ console.log(o); return { fun: function(m){ return fun(m, n); } }; } 同一个闭包,保存相同的值 var a = fun(0); // undefined 闭包a:n === 0 a.fun(1); // 0 a.fun(2); // 0 a.fun(3); // 0 多个闭包之间,数值互不干扰 // var b = fun(0).fun(1).fun(2).fun(3); var b0 = fun(0); // undefined 上一次的调用该结果作为下一次的参数传入 var b1 = b0.fun(1); // 0 var b2 = b1.fun(2); // 1 var b3 = b2.fun(3); // 2 ## 3、作用:缓存数据,避免污染全局 ## 闭包的使用,提高性能 var fib = function(){ var cache = []; return function(n){ if(n < 1){ return undefined; } var val = cache[n]; if(!val){ if(n === 1 || n === 2){ val = 1; } else{ val = arguments.callee(n - 1) + arguments.callee(n - 2); } cache[n] = val; } return val; }; }(); //自调执行 for(var i = 0; i < 10; i++){ console.log(fib(i)); } ## 4、 弊端:内存泄漏 ## 由于闭包可以缓存数据,常驻内存, 容造成造成内存泄漏。( 将闭包变量 赋值为 null) 1. 引用计数法 当定义一个变量 (此时引用计数为0)并且 赋值为指定的数据时,该变量的引用计数 + 1; 如果该数据,有其他对象或函数使用,引用计数 + 1; 如果使用该数据的对象或函数,被GC回收掉,那么引用计数 - 1; 如果该变量手动赋值为null,此时引用计数 - 1; 当GC对象寻访到该变量时,如果计数为0,GC对象就直接回收该变量所占用的内存。 如果函数正在执行或还没有执行完毕,内部定义的数据都是不可回收的,不论引用计数是否为0。 引用计数的缺陷:容易产生循环引用,导致变量无法被GC回收。 2. 标记清除法 从文档的根节点(window对象)出发,找到至少一条路径可以到达该变量,那么该变量被标记为 “不可回收”;否则,该变量标记为 “可回收”。 当GC对象寻访到该变量,如果被标记为 “可回收”,那么,就会立即回收掉其所占用的内存。 标记清除法的缺陷:性能比较低。
相关 闭包 函数嵌套函数 内部函数使用外部函数的变量 外部函数被调用 优点: 延长局部变量的声明周期 缺点: [内存泄漏][Link 1] [Link 1]: ht 朱雀/ 2023年03月14日 13:57/ 0 赞/ 220 阅读
相关 闭包 1、定义: 当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包 function A(){ var count = 0; 素颜马尾好姑娘i/ 2022年06月09日 09:20/ 0 赞/ 218 阅读
相关 闭包 先来看一个题目例子,我将在下一环节出闭包讲解。。 题目描述 实现函数 makeClosures,调用之后满足如下条件: 1、返回一个函数数组 result,长度与 喜欢ヅ旅行/ 2022年06月04日 05:51/ 0 赞/ 218 阅读
相关 闭包 1.闭包的作用 1. 实现公有变量 eg:函数累加器 1. 可以做缓存(存储结构) function eater(){ var f 落日映苍穹つ/ 2022年06月04日 04:05/ 0 赞/ 233 阅读
相关 闭包 写在前面 > 其实闭包这个词在很多的地方都听到过,以前看到说这是前端javascript这门语言的所具有的特点。当时不知所以然也没接触到对应的概念,现在遇到一个问题就是, 桃扇骨/ 2022年05月15日 03:14/ 0 赞/ 274 阅读
相关 闭包 JS闭包 > 闭包是函数和声明该函数的词法环境的组合 从本质上讲,闭包是外部函数和内部函数链接的桥梁;也就是在一个作用域中可以访问另一个作用域的变量,外部函数作用 朴灿烈づ我的快乐病毒、/ 2022年04月03日 15:54/ 0 赞/ 266 阅读
相关 闭包 1.闭包 2.原型链 3.深/浅拷贝 4.this指向 5.柯里式 6.ES6 7.webpack 配置 打包 8.虚拟dom 9.js 堆栈 我就是我/ 2022年03月06日 06:06/ 0 赞/ 278 阅读
相关 闭包 闭包 1. 函数引用 def test1(): print("--- in test1 func----") \调用函数 test1() \引用函数 桃扇骨/ 2022年02月20日 00:35/ 0 赞/ 291 阅读
相关 闭包 在函数内定义个函数,并将函数作为结果返回。返回的函数可以调用外部函数的参数,如果该函数被执行,将返回已经结算出的值 <!DOCTYPE html> <html 古城微笑少年丶/ 2022年02月01日 09:01/ 0 赞/ 293 阅读
相关 闭包 闭包: 就是能够读取其他函数内部变量的函数或者说闭包就有权访问另一个函数作用域中的变量的函数。 作用: 1.可以读取函数的变量 2.让这些变量的值始终保存在内存中 3 墨蓝/ 2021年10月01日 06:58/ 0 赞/ 424 阅读
还没有评论,来说两句吧...