首頁  >  問答  >  主體

javascript - NodeJS connect模組use的問題

初學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的一些東西,不知道理解對不對

漂亮男人漂亮男人2688 天前954

全部回覆(1)我來回復

  • phpcn_u1582

    phpcn_u15822017-07-03 11:44:55

    閉包」 一詞源自於以下兩者的結合:要執行的程式碼區塊(由於自由變數被包含在程式碼區塊中,這些自由變數以及它們所引用的物件沒有被釋放)和為自由變數提供綁定的運算環境(作用域) ---百度百科

    先說下閉包概念

    你的理解沒錯

    這個是驗證過程,原因是因為如果你直接調用end,這個end是因為這個閉包強行留下來的,所以會自動綁定計算機環境,所以這是後他的this就是Window,所以直接呼叫end會出錯

    回覆
    0
  • 取消回覆