javascript - NodeJS connect模块use的问题
漂亮男人
漂亮男人 2017-07-03 11:42:55
0
1
969

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

漂亮男人
漂亮男人

全部回复(1)
phpcn_u1582

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

先说下闭包概念

你的理解没错

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板