原生javascript閉包的定義和理解
阿新 • • 發佈:2018-12-25
就是一個函式何以訪問另一個函式內部的區域性變數 可以避免垃圾回收機制
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