如何使用 document.createElement 避免内存泄漏?

时间:2021-05-12 21:51:09

标签: javascript dom memory-leaks

以下代码是否会泄漏内存?

也就是说,如果它的输出没有被复制到这里的 console 中,那么 fileUploadPrompt() 可以运行无限次来检索无限数量的文件,而无需重新加载页面到可用内存?

或者我需要以某种方式销毁临时变量 e 吗?我是否应该将单个 <input> 元素放在一个闭包中并在所有对 fileUploadPrompt 的调用中重复使用它?

async function fileUploadPrompt(multiple = false) {
  const e = document.createElement('input');
  e.type = 'file';
  e.multiple = multiple;
  let cp = changePromise(e); // create before .click() to avoid race condition
  e.click();
  await cp;
  return multiple ? e.files : e.files[0];
}


/*  Helper method  */

function changePromise(target) {
  return new Promise(resolve =>
    target.addEventListener('change', resolve, {once: true}));
}
<button onclick="fileUploadPrompt(true).then(files=>Array.from(files).forEach(file=>
console.log(({name: file.name, lastModified: file.lastModified, size: file.size, type: file.type}))))">
Get Some Files</button>

0 个答案:

没有答案
相关问题