搜索

首页  >  问答  >  正文

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的一些东西,不知道理解对不对

漂亮男人漂亮男人2700 天前971

全部回复(1)我来回复

  • phpcn_u1582

    phpcn_u15822017-07-03 11:44:55

    闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域) ---百度百科

    先说下闭包概念

    你的理解没错

    这个是验证过程,原因是因为如果你直接调用end,这个end是因为这个闭包强行留下来的,所以会自动绑定计算机环境,所以这是后他的this就是Window,所以直接调用end会出错

    回复
    0
  • 取消回复