javascript - NodeJS connect模塊use的問題
問題描述
初學(xué)nodejs,在了不起的NodeJS有這樣一段代碼,通過中間件,實現(xiàn)代碼請求時間過長的控制臺打印
//request-time.jsmodule.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的一些東西,不知道理解對不對
問題解答
回答1:閉包” 一詞來源于以下兩者的結(jié)合:要執(zhí)行的代碼塊(由于自由變量被包含在代碼塊中,這些自由變量以及它們引用的對象沒有被釋放)和為自由變量提供綁定的計算環(huán)境(作用域) ---百度百科
先說下閉包概念
你的理解沒錯,這個是驗證過程,原因是因為如果你直接調(diào)用end,這個end是因為這個閉包強行留下來的,所以會自動綁定計算機環(huán)境,所以這是后他的this就是Window,所以直接調(diào)用end會出錯
相關(guān)文章:
1. angular.js - webpack build后的angularjs路由跳轉(zhuǎn)問題2. java - Activity中的成員變量被賦值之后,Activity被回收的時候內(nèi)存才會被釋放嗎3. java - web項目中,用戶登陸信息存儲在session中好 還是cookie中好,取決于什么?4. 數(shù)組按鍵值封裝!5. 為什么 必須在<ul> 下建立 <li> 在建<a>?6. 單擊登錄按鈕無反應(yīng)7. 8.1.0.5版本的root數(shù)據(jù)庫怎么導(dǎo)出啊?8. 請求一個數(shù)據(jù)返回內(nèi)容為空或者錯誤如何再次請求幾次9. 老師,怎么不講一次性添加多個數(shù)據(jù)10. 我寫的哪里有錯?請大神幫忙查看一下。
