1. 程式人生 > >原生javascript閉包的定義和理解

原生javascript閉包的定義和理解

就是一個函式何以訪問另一個函式內部的區域性變數 可以避免垃圾回收機制

javascript 中的函式都可以稱為閉包,只不過巢狀的更厲害 可以吧值儲存在記憶體中。

閉包是指在函式外部訪問函式作用域中變數(區域性變數)的函式;或者說閉包就是能夠讀取其他函式內部變數的函式;或者說閉包是指有權訪問另一個函式作用域中的變數的函式;由於在Javascript語言中,只有函式內部的子函式才能讀取區域性變數,因此可以把閉包簡單理解成“定義在一個函式內部的函式”

 

//普通函式未使用閉包
function test1(){
	var i =1;
	console.log(i)//1
}
test1()

function test2(){
	console.log(i)//報錯
}
test2()
//閉包使用
function test1(){
	var i =1;
	//func就是一個閉包函式  從其他函式內部可以訪問;
	var func = function fun(){
		console.log(i)
	}
	return func;
}
test1()

function test2(){
	test1()();//1
}
test2()
function test(){
		var i = 100;
		return function f(){
			i++;
			alert(i);
		}
	}
	var t = test();
	t(); //101
	t();//102
	t();//103
	t();//104
	t();//105

	var t2 = test();
	t2(); //101
	t2();//102
	t2();//103
	t2();//104
	t2();//105