你能解释一下JavaScript中封装的匿名函数语法背后的原因吗?为什么这样做:(function(){})();但这不是:function(){}();?
在JavaScript中,可以创建一个这样的命名函数:
function twoPlusTwo(){
alert(2 + 2);
}
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)
您还可以创建匿名函数并将其分配给变量:
var twoPlusTwo = function(){
alert(2 + 2);
};
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)
您可以通过创建匿名函数来封装代码块,然后将其包装在括号中并立即执行:
(function(){
alert(2 + 2);
})();
Run Code Online (Sandbox Code Playgroud)
这在创建模块化脚本时非常有用,可以避免使当前作用域或全局作用域混乱,并且可能存在冲突的变量 - 例如Greasemonkey脚本,jQuery插件等.
现在,我理解为什么会这样.括号包含内容并仅公开结果(我确定有更好的方法来描述),例如with (2 + 2) === 4.
但我不明白为什么这也不起作用:
function(){
alert(2 + 2);
}();
Run Code Online (Sandbox Code Playgroud)
你能解释一下吗?
有没有办法在使用Javascript上传到服务器之前计算文件的MD5哈希值?
问题:
如何正确生成校验和,这是独立的,一致的,独立于浏览器?另外,我想将SHA256/MD5校验和字符串转换为64位.
如何在没有大量RAM要求的情况下正确读取文件以生成校验和?即我们如何在不影响RAM的情况下处理1 GB文件
例如,是否可以在不将文件加载到内存的情况下读取文件?(见答案)
这个项目似乎很有希望,但也无法实现.
我的目的是在X MB的块中逐步/递增地生成校验和.这可能有助于避免一次使用太多RAM.
以下是代码,它没有按预期工作:
let SIZE_CHECKSUM = 10 * Math.pow(1024, 2); // 10 MB; But can be 1 MB too
async function GetChecksum (file: File):
Promise<string>
{
let hashAlgorithm: CryptoJS.lib.IHasher<Object> = CryptoJS.algo.SHA256.create();
let totalChunks: number = Math.ceil(file.size / SIZE_CHECKSUM);
for (let chunkCount = 0, start = 0, end = 0; chunkCount < totalChunks; ++chunkCount)
{
end = Math.min(start + SIZE_CHECKSUM, file.size);
let resultChunk: string = await (new Response(file.slice(start, end)).text());
hashAlgorithm.update(resultChunk);
start …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Node Js 中重写以下函数,以生成校验和并验证支付交易,而且我对在 Node Js 中编写代码还很陌生。
我已经从服务提供者那里获得了代码,我需要将其转换为 Node Js。我使用 Express 作为我的后端。
<?php
function generateChecksum($transId,$sellingCurrencyAmount,$accountingCurrencyAmount,$status, $rkey,$key)
{
$str = "$transId|$sellingCurrencyAmount|$accountingCurrencyAmount|$status|$rkey|$key";
$generatedCheckSum = md5($str);
return $generatedCheckSum;
}
function verifyChecksum($paymentTypeId, $transId, $userId, $userType, $transactionType, $invoiceIds, $debitNoteIds, $description, $sellingCurrencyAmount, $accountingCurrencyAmount, $key, $checksum)
{
$str = "$paymentTypeId|$transId|$userId|$userType|$transactionType|$invoiceIds|$debitNoteIds|$description|$sellingCurrencyAmount|$accountingCurrencyAmount|$key";
$generatedCheckSum = md5($str);
// echo $str."<BR>";
// echo "Generated CheckSum: ".$generatedCheckSum."<BR>";
// echo "Received Checksum: ".$checksum."<BR>";
if($generatedCheckSum == $checksum)
return true ;
else
return false ;
}
?>
Run Code Online (Sandbox Code Playgroud)
如何在 Javascript 中编写以下代码并传递参数。
我必须从前端上传文件并计算该文件的md5哈希值。我尝试使用crypto.js生成md5,但对于图像,它给了我错误的md5。我看到了一个名为onlinemd5.com的网站,而这正是我所需要的。
谁能帮助我如何使用JavaScript计算文件(文本文件,图像,视频等)的md5哈希值?是否可以从http://onlinemd5.com下载代码并实施该代码?
注意:我尝试了如何使用javascript计算文件的md5哈希中的一些建议,但没有用。
$scope.upld = function(element){
$scope.files = element.files;
var file = $scope.files[0];
var reader = new FileReader();
reader.onload = function(){
$scope.md5_val = CryptoJS.MD5(reader.result);
$scope.upload_file();
$scope.$apply();
};
reader.readAsBinaryString(file);
};
Run Code Online (Sandbox Code Playgroud)
crypto.js没有正确计算图像md5。我没有尝试sparkmd5 js。
我正在寻找一种将给定字符串转换为字母数字哈希的方法。代码将在客户端执行,并且最多必须完全使用 vanilla JS 或 jQuery。
然而,是否还有一个非加密哈希,即只是一串不需要cryptoand的字母数字字符串Promises?我需要两者,即加密和非加密哈希。
第二个散列可以是普通的字母数字字符串,例如 10 个字符长。它应该是可恢复的,即应该始终为给定的字符串重新创建相同的哈希值。如果第二个哈希不是异步生成的(即使用Promises),那就更好了。boolean我打算将它用作in的键window.localStorage(对于许多不同的字符串)。
最终答案:
javascript ×6
algorithm ×2
md5 ×2
checksum ×1
express ×1
file-upload ×1
hash ×1
node.js ×1
sha256 ×1
syntax ×1
typescript ×1