在下面的函数中,我们将数据url转换为blob。
实际上我正在写一个组件,可以裁剪图像…如果我使用const,屏幕就会死机。什么也没发生……只有在使用var之后,它似乎才工作。
const dataURLtoBlob = (dataurl) => {
var arr = dataurl.split(",");
var mime = arr[0].match(/:(.*?);/)[1];
var bstr = atob(arr[1]);
var n = bstr.length;
var u8arr = new Uint8Array(n);
n--;
while (n) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
};
为什么这里使用var
?是因为var
可以重新分配和修改吗?
在javascript中有3种声明变量的方法,var, let, const。
var是全局作用域,这意味着如果你在函数内部声明它,它可以在整个函数中读取,所以即使你在while内声明了一个变量,你也可以在while外读取它。
let是块作用域,这意味着它只能从声明它的块中读取。因此,如果你在while语句中声明了一个变量,你只能在while语句块中读取它。
const和let很像但是不能重赋值
在你的例子中,所有变量都在同一个块中声明,并且永远不会被重新赋值,所以let、var和const的工作方式是相同的。声明它们的最正确的方法是const,因为它们永远不会被重新赋值,但所有方法都可以。
更多信息:https://www.geeksforgeeks.org/difference-between-var-let-and-const-keywords-in-javascript/