我遇到了如下代码。
return new Promise(function (resolve, reject) {
if (!message) return reject(new Error('Requires message request to send'));
message = (0, _getURLJWT)(message);
.....
.....
var enc = (0, _encryptMessage)(plaintext, pubEncKey);
}, function (error, res, body) {
....
....
});
});
我不了解代码中的两个表达式:
message = (0, _getURLJWT)(message);
var enc = (0, _encryptMessage)(plaintext, pubEncKey);
这看起来像IIFE(立即调用的函数表达式),但是,我不明白该行末尾的括号如何正常工作或它们正在做什么。
有人可以帮我理解吗?
_getURLJWT
和_encryptMessage
可能分别是使用参数message
和调用的函数plaintext, pubEncKey
。
当您编写两个用逗号运算符分隔的值时,Javascript将评估其所有操作数并返回最后一个。因此0, 1
将进行评估1
。
因此,(0, _getURLJWT)(message)
将评估为_getURLJWT(message)
例如:
console.log((0,1)); //1
(0, (myArg) => console.log(myArg))('hello'); //hello
调用此方法可确保在this
设置为全局对象的情况下调用该函数。
const myObj = {
printMe: function() { console.log(this); },
}
myObj.printMe(); //{printMe: ƒ}
(0, myObj.printMe)(); // Window {parent: Window, opener: null...} <= loses reference, the this will not longer be bound to myObj, but will be bound to the global object.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句