【问题标题】:Why set a variable to null right before returning from a function?为什么在从函数返回之前将变量设置为 null?
【发布时间】:2019-04-11 00:42:47
【问题描述】:

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

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

【问题讨论】:

  • 这本质上是对对象的处置,以销毁对象,从而完全释放内存。
  • @abc123 不会在函数结束时自动发生,因为变量的生命周期会消失?

标签: javascript electron


【解决方案1】:

我不明白之前将newWindow 设置为null 的意义 函数结束。

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

.on 回调使用 newWindow 变量,该变量在更高的范围内声明,从而在其周围设置 closure这意味着newWindow 将在声明它的函数(分配给exports.createWindow 的箭头函数)结束后持续存在。

为了防止变量无限期地持续存在,对null 的赋值是为了确保在关闭使用它的window 时释放内存。

【讨论】:

  • 谢谢。这清除了事情:)。虽然还不能接受答案。
猜你喜欢
  • 1970-01-01
  • 2020-05-13
  • 2016-11-25
  • 2022-01-22
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多