以下代码是否会泄漏内存?
也就是说,如果它的输出没有被复制到这里的 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>