javascript - NodeJS connect模块use的问题
问题描述
初学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:闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域) ---百度百科
先说下闭包概念
你的理解没错
,这个是验证过程,原因是因为如果你直接调用end,这个end是因为这个闭包强行留下来的,所以会自动绑定计算机环境,所以这是后他的this就是Window,所以直接调用end会出错
相关文章:
1. javascript - 百度坐标,返回目标附近有哪些坐标2. javascript - 关于jsp中嵌入js代码的问题3. javascript - 判断用户网络环境4. javascript - 对不同类别的id的物品中的某个字段做权重覆盖,除了直接使用if else语句还能有更优雅便于维护的方式吗?5. javascript - 一个JS多元运算符的问题6. javascript - 关于fullpage.js的横向滚动控制7. javascript - 为什么var obj = {}创建对象的方法里面不能用this.xxx来声明属性 ?8. javascript - 有什么兼容性比较好的办法来判断浏览器窗口的类型?9. javascript - 有一个异步获取数据的函数A,其他依赖这个A得到的数据的函数是否都必须是异步的?10. angular.js - angurlarJS的安卓的微信端中用加载ngCookies会出错的问题

网公网安备