當前位置:菜譜大全網 - 饑荒食譜 - JavaScript中的閉包是什麽?有哪些應用場景?

JavaScript中的閉包是什麽?有哪些應用場景?

閉包是壹個可以訪問另壹個函數範圍內的變量的函數。

創建閉包的常見方法是在函數中創建函數。示例:

functioncreateFunction(名稱){

回歸?函數(obj1,?obj2){

var?value1?=?obj 1[姓名];

var?value2?=?obj 2[姓名];

回歸?value1?+?",?"?+value 2;

}

}為了徹底理解閉包,了解創建作用域的細節以及作用域的作用非常重要。當壹個函數被調用時,壹個執行環境和相應的作用域鏈被創建。然後,用自變量和其他參數的值初始化函數的活動對象。

首先,結束

1和createFunction()創建時,其(比較)的作用域包含createFunction()函數的活動對象和全局對象。

//創建壹個函數

var?比較?=?create function(" name ");

console . log(type of compare);//函數2。匿名函數執行時,創建自己的活動對象和可以訪問createFunction()的執行環境。

//調用函數

var?結果?=比較({name:?" jjaiy"},?{ name:" ascy " });//jjayy,?ascy3和createFunction()函數執行後,其執行環境的作用域不會被破壞。原因是它的活動對象仍然在內存中,直到匿名函數被銷毀。

//取消引用匿名函數(以釋放內存)

比較?=?null原因是:

瀏覽器垃圾收集方法有:

標記清除(主要針對變量)

引用計數(記錄每個值被引用的次數)

二、示例操作

封裝功能

var?路線?=?{

路線:?{},

對於:?函數(路徑,handler){?//閉包

this.routes[path]?=?處理者;//引用回調函數

}

};

//執行兩個匿名函數。

route.for("/start ",函數(request,響應){

response.writeHead(200,{"Content-Type ":?" text/plain " });

response . write(" Hello ");

response . end();

});

route.for("/finish ",函數(request,響應){

response.writeHead(200,{"Content-Type ":?" text/plain " });

response.write(“再見”);

response . end();

});

//首先判斷參數中的路徑變量是否壹致,以及其函數中的回調函數是否可以調用。

if(typeof?route.routes["/finish"]?===?函數'){

route.routes["/finish"](請求,?回應);

}