javascript - NodeJS connect模塊use的問題
問題描述
初學nodejs,在了不起的NodeJS有這樣一段代碼,通過中間件,實現代碼請求時間過長的控制臺打印
//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:閉包” 一詞來源于以下兩者的結合:要執行的代碼塊(由于自由變量被包含在代碼塊中,這些自由變量以及它們引用的對象沒有被釋放)和為自由變量提供綁定的計算環境(作用域) ---百度百科
先說下閉包概念
你的理解沒錯
,這個是驗證過程,原因是因為如果你直接調用end,這個end是因為這個閉包強行留下來的,所以會自動綁定計算機環境,所以這是后他的this就是Window,所以直接調用end會出錯
相關文章:
1. 如何解決docker宿主機無法訪問容器中的服務?2. springboot - spring-boot-starter-thymeleaf對沒有結束符的HTML5標簽解析出錯3. javascript - 求助Angular 跨控制器調用方法可行嗎?4. 我 想好好學精通一門技術,大家用的走過的路,幫我指點指點唄 讓我少走了彎路和坑的苦 ,自學,自己摸5. html - css布局問題,背景用用div畫的三角形是否用absolute與z-index來定位與規定在下方是否是個好方案6. 正則表達式 - nginx 正則,如何匹配不以/結尾且不以.xml .html .htm結尾7. 淺談vue生命周期共有幾個階段?分別是什么?8. index.php錯誤,求指點9. Android 高德地圖如何移除添加的某個marker?10. javascript - 函數聲明和匿名函數有什么不同?(前端小白求助。。)

網公網安備