明天在做一个拷贝函数, 要在 document.execCommand('copy') 的中央加异样解决。平时的习惯上面这样写,在失去后果后先移除 input 而后 return

function copyText(text) {    const inputElement = document.createElement('textarea');    Object.assign(inputElement.style, {        opacity: 0,        position: 'fixed',        top: 0    });    document.body.appendChild(inputElement);    inputElement.readOnly = true;    inputElement.value = text;    inputElement.select();    inputElement.setSelectionRange(0, text.length);    let result=false;    try {        result = document.execCommand('copy')    } catch (err) {}    document.body.removeChild(inputElement)    return result}

突发奇想,试下 finally 中来移除 input 。各位然而 finally 这个在 return 之后会不会执行啊。试了下竟然会,并且 finally 中的代码先于 return 自身执行,返回值也正确。

try {    return document.execCommand('copy')} catch (err) {    return false} finally {    document.body.removeChild(inputElement)}

执行程序验证代码

function test() {    try {        return console.log(1), 3;    } finally {        console.log(2)    }}console.log(test())

输入:1,2,3

return 左边先执行,而后 finally, 最初 return 。感觉像找到一种在 return 前面还能执行代码的形式