看下面代码:
function readData() {
var buf = new Buffer(1024 * 1024 * 100)
var index = 0
buf.fill('g')
return function() {
index++
if (index < buf.length) {
return buf[index-1]
} else {
return ''
}
}
}
var data = readData()
var next = data()
while (next !== '') {
// process data()
next = data()
}
readData()
返回一个函数,就是说返回了一个闭包。闭包引用了readData()
函数中的局部变量buff
。
var data = readData()
执行完后,readData()
的局部变量buf
不会被释放。
这是因为data
变量引用了readData()
返回的闭包,而该闭包又引用了变量buf
,所以javascript引擎不会回收buf
内存。
所以,写类似这样的代码,一定要记住手动清除引用:
function readData() {
var buf = new Buffer(1024 * 1024 * 100)
var index = 0
buf.fill('g')
return function() {
index++
if (index < buf.length) {
return buf[index-1]
} else {
buf = null; // 不再使用buf, 手动清除引用。
return ''
}
}
}
var data = readData()
var next = data()
while (next !== '') {
// process data()
next = data()
}