初學nodejs,在了不起的NodeJS有這樣一段程式碼,透過中間件,實作程式碼請求時間過長的控制台列印
//request-time.js
module.exports = function(opts){
var time = opts.time||100;
return function(req,res,next){
var timer = setTimeout(function(){
console.log(req.method + " , " + req.url + " , too long!");
},time);
var end = res.end;
res.end = function(chunk,encoding){
res.end = end; //
res.end(chunk,encoding); //直接end(chunk,encoding)会出错
clearTimeout(timer);
};
next();
}
}
註解的部分就是本人的疑問,猜測是end裡有this的一些東西,不知道理解對不對
phpcn_u15822017-07-03 11:44:55
閉包」 一詞源自於以下兩者的結合:要執行的程式碼區塊(由於自由變數被包含在程式碼區塊中,這些自由變數以及它們所引用的物件沒有被釋放)和為自由變數提供綁定的運算環境(作用域) ---百度百科
先說下閉包概念
你的理解沒錯
,
這個是驗證過程,原因是因為如果你直接調用end,這個end是因為這個閉包強行留下來的,所以會自動綁定計算機環境,所以這是後他的this就是Window,所以直接呼叫end會出錯