js闭包

js闭包

闭包出现的条件:在局部作用域访问了其他局部作用域的变量。(底层原因:与js的内存回收有关。函数执行时返回了一个引用数据类型的值,并且在函数外面被一个其他的变量接收了,这个情况下形成的(函数的)作用域不会销毁)

闭包的特点:函数引用的变量会被保存,存放在不被销毁的私有栈环境,共享。需要人为销毁,切断引用(null),防止内存泄漏。

 

用闭包实现一个单例模式:

 1     function SetPerson(name) {
 2         this.name = name;
 3     }
 4 
 5     SetPerson.prototype.getName = function () {
 6         console.log(this.name);
 7     }
 8     const singletonSetPerson = (function () {
 9         let person = null;
10         return function (name) {
11             if (!person) {
12                 person = new SetPerson(name);
13             }
14             return person;
15         }
16     })();
17     singletonSetPerson('zhangsan').getName()    //zhangsan
18     singletonSetPerson('lisi').getName()    //zhangsan
19     singletonSetPerson('wangwu').getName()  //zhangsan

 

posted @ 2021-09-28 16:06  亦茫茫  阅读(35)  评论(0编辑  收藏  举报