今天在做一个拷贝函数, 要在 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 后面还能执行代码的方式
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。