JS-[IIFE&闭包]
Posted yangjiale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS-[IIFE&闭包]相关的知识,希望对你有一定的参考价值。
JS-IIFE&闭包
IIFE(立即调用函数表达式)
示例
(function iife() //直接执行,无需调用
console.log("hello");
)();
//上面相当于
function iife()
console.log("hello");
iife();
注意:为了规范,IIFE的函数名虽无意义,但最好加上
IIFE实现单例模式
var sun=(function()
console.log("sun create..."); //在声明还未调用时就被直接执行
var name="sun";
var size=1599;
function say()
console.log(name+" "+size);
return //返回可供调用的方法或参数
say:say,
name:name //返回的name只是一个形参
)();
sun.say();
IIFE的作用:隔离作用域,防止污染全局命名空间
闭包
计数器例子
非闭包实现
var count=0;
function add()
count++;
console.log(count);
add();
add(); //输出2
上面的计数器缺点是count是全局的,不具有安全性,易被误操作。用闭包就可以解决这个问题
闭包实现
function counter()
var count=0; //函数内部定义,不影响全局
function add()
count++;
console.log(count);
return
add:add
;
var counter1=new counter();
counter1.add();
counter1.add(); //输出2
IIFE闭包实现
(function counter()
var count=0;
function add()
count++;
console.log(count);
window.counter= //直接把计时器赋给window作为属性
add:add
;
)();
//直接调用,不需要new
counter.add();
counter.add(); //输出2
内存泄露解决
当不需要使用闭包时,闭包仍在占用内存,可能会造成 内存泄露
因此,不使用时可以通过:
counter=null;
此时counter就被释放了
以上是关于JS-[IIFE&闭包]的主要内容,如果未能解决你的问题,请参考以下文章