为什么要在从函数返回之前立即将变量设置为null?

时间:2019-04-10 16:33:41

标签: javascript electron

在阅读电子书时,我偶然发现了以下代码。

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;
  });

1 个答案:

答案 0 :(得分:4)

  

我没想到在即将之前将newWindow设置为null的意义   函数结束。

该代码并未在函数结束前将newWindow设置为null 。它会在window关闭((将来的某个时候))时进行设置,因此newWindow将一直保留在内存中,直到该时间为止。

.on回调使用newWindow变量,该变量在更高的范围内声明,从而在其周围设置了 closure 这意味着newWindow将在其声明的功能(分配给exports.createWindow的箭头功能)结束后保留​​。

为防止变量无限期持久存在,对null的分配用于确保在关闭使用它的window时释放内存。