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

阅读 2.1k
1 个回答

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

先说下闭包概念

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题