Читая книгу об электроне, я наткнулся на следующий код.
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 не произойдет ли это автоматически, когда функция завершится, так как жизнь переменной умирает?
См. также stackoverflow.com/a/50527312/2550156
I don't see the point of setting
newWindow
tonull
right before the function ends.
Этот код не устанавливает newWindow
в null
прямо перед окончанием функции. Он устанавливает его, когда window
закрывается (что будет когда-то в будущем), и поэтому newWindow
будет сохраняться в памяти до этого времени.
Обратный вызов .on
использует переменную newWindow
, которая объявлена в более высокой области видимости, тем самым настраивая вокруг нее закрытие. Это означает, что newWindow
будет сохраняться после завершения функции, в которой она объявлена (функция стрелки, назначенная exports.createWindow
).
Чтобы переменная не сохранялась бесконечно, назначение null
гарантирует, что память освобождается, когда window
, который ее использовал, закрывается.
Спасибо вам. Это проясняет ситуацию :). Однако пока не могу принять ответ.
По сути, это избавление от объекта, чтобы уничтожить объект, полностью освобождая память.