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