在阅读电子书时,我偶然发现了以下代码。
const windows = new Set();
app.on('ready', () => {
createWindow();
});
const createWindow = exports.createWindow = () => {
let newWindow = new BrowserWindow({
show: false
});
newWindow.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}));
newWindow.once('ready-to-show', () => {
newWindow.show();
});
newWindow.on('closed', () => {
windows.delete(newWindow);
newWindow = null;
});
windows.add(newWindow);
return newWindow;
};
这是我想发生的事情,变量newWindow
在函数中是局部的。 closed event
是最后发生的事件。因此,closed event
完成后,函数结束。意味着newWindow
变量不再存在。
根据我目前的理解,我看不到在函数结束之前将newWindow
设置为null的意义。
有什么理由吗?
newWindow.on('closed', () => {
windows.delete(newWindow);
newWindow = null;
});
答案 0 :(得分:4)
我没想到在即将之前将
newWindow
设置为null
的意义 函数结束。
该代码并未在函数结束前将newWindow
设置为null
。它会在window
关闭((将来的某个时候))时进行设置,因此newWindow
将一直保留在内存中,直到该时间为止。
.on
回调使用newWindow
变量,该变量在更高的范围内声明,从而在其周围设置了 closure 。 这意味着newWindow
将在其声明的功能(分配给exports.createWindow
的箭头功能)结束后保留。
为防止变量无限期持久存在,对null
的分配用于确保在关闭使用它的window
时释放内存。