JS-[IIFE&閉包]

 

 

IIFE(當即調用函數表達式)

示例

(function iife(){	//直接執行,無需調用
	console.log("hello");
})();	

//上面至關於

function iife(){
	console.log("hello");
}
iife();

注意:爲了規範,IIFE的函數名雖無心義,但最好加上html

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的做用:隔離做用域,防止污染全局命名空間java

閉包

計數器例子

非閉包實現

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就被釋放了spa

相關文章
相關標籤/搜索