为了账号安全,请及时绑定邮箱和手机立即绑定

NodeJS connect模块use的问题

NodeJS connect模块use的问题

慕码人2483693 2018-11-16 16:14:07
初学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 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

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

先说下闭包概念

你的理解没错

https://img1.sycdn.imooc.com//5c25e3310001ccfa13570477.jpg

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

查看完整回答
反对 回复 2018-12-28
  • 1 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信