![](/img/trans.png)
[英]A closure name clashes with function of same name inside it, but only in Chrome
[英]Long function name inside closure
我正在閱讀這篇文章並試圖理解這段代碼
function getRandomNumber(start = 1, end = 10) {
//works when both start and end are >=1
return (parseInt(Math.random() * end) % (end - start + 1)) + start;
}
var promiseTRRARNOSG = (promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator = function() {
return new Promise(function(resolve, reject) {
let randomNumberOfSeconds = getRandomNumber(2, 10);
setTimeout(function() {
let randomiseResolving = getRandomNumber(1, 10);
if (randomiseResolving > 5) {
resolve({
randomNumberOfSeconds: randomNumberOfSeconds,
randomiseResolving: randomiseResolving
});
} else {
reject({
randomNumberOfSeconds: randomNumberOfSeconds,
randomiseResolving: randomiseResolving
});
}
}, randomNumberOfSeconds * 1000);
});
});
var testProimse = promiseTRRARNOSG();
testProimse.then(function(value) {
console.log("Value when promise is resolved : ", value);
});
testProimse.catch(function(reason) {
console.log("Reason when promise is rejected : ", reason);
});
// Let us loop through and create ten different promises using the function to see some variation. Some will be resolved and some will be rejected.
for (i=1; i<=10; i++) {
let promise = promiseTRRARNOSG();
promise.then(function(value) {
console.log("Value when promise is resolved : ", value);
});
promise.catch(function(reason) {
console.log("Reason when promise is rejected : ", reason);
});
}
這里作者做了類似這樣的事情var promiseTRRARNOSG = (promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator = function() {
我無法理解。
有人會幫我理解這一行嗎? 我的意思是那條代碼/聲明。
promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator
和promiseTRRARNOSG
引用相同的函數。 請考慮以下聲明:
var a = (b = function() {});
這里a
和b
指的是相同的功能。 這里的parens沒有做任何特別的事情。 您可以這樣重寫語句:
var a = b = function() {};
這里的a
定義為常規變量, b
是全局變量。 那個無用的長變量應該是一個評論。
我看不出promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator變量的原因。 它沒有被使用。
它在功能上與...相同
function promiseTRRARNOSG() { // same function body after here.
想想看起來像的匿名函數:
var promiseTRRARNOSG = function() {
但是作者為了“調試目的”給了該函數一個名稱來獲取在backtrace中調用的方法名稱,或者他/她試圖從長方法名稱中創建一個別名:
var promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator = function() {
return new Promise ...
}
var promiseTRRARNOSG = promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator;
但后來改變了他/她的想法,使它像:
var promiseTRRARNOSG = (
promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator = function() {
return new Promise ...
}
);
讓我們調用函數promiseTRRARNOSG,它是promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator的別名。
作者所做的是在變量中放置一個匿名函數,該函數有一個返回變量。 因此該函數將返回一個值,該值將成為函數在其中聲明的變量的值。 所以,如果我有一個變量:
var test = function(text) {
return text + " " + text;
}
然后制作更多這樣的文字:
var words = test("words");
然后words
將具有"words words"
的值。 這是JavaScript框架(如jQuery)中常見的概念。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.