比如一个不断查询的函数,在查询完成后,继续调用自己,继续下一次查询,不断回调,永远都没有函数结束返回的那一刻, 这样是不是调用前的变量占用都不能释放,继续下去会吃光内存吗?
http = require(‘http’); function request() { http.get(‘http://www.baidu.com/’, function(res){ res.setEncoding(‘utf8’); res.on(‘data’, function(){ }).on(‘end’, function(){ console.log(res.headers); request(); // 继续下一次 }); }); }
RangeError: Maximum call stack size exceeded
不会的,每个回调函数会加入事件队列,事件队列会不断的被消费,所以没关系
感觉不会诶
不会。其实这种调用并不是递归,首次调用request,调用http.get异步方法后就返回了,事件机制回调监听函数才执行下一次request
堆栈溢出 +1
不太肯定会不会有问题,但我可以肯定如果你在这里用 setImmediate 就一定不会有问题。 http://nodejs.org/api/timers.html#timers_setimmediate_callback_arg