码迷,mamicode.com
首页 > Web开发 > 详细

JS-[IIFE&闭包]

时间:2019-07-29 00:48:19      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:形参   计时   null   缺点   立即调用函数表达式   keyword   一个   hello   返回   

 

 

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&闭包]

标签:形参   计时   null   缺点   立即调用函数表达式   keyword   一个   hello   返回   

原文地址:https://www.cnblogs.com/yangjiale/p/11261372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!