簡體   English   中英

封閉內的長函數名稱

[英]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() {我無法理解。

有人會幫我理解這一行嗎? 我的意思是那條代碼/聲明。

promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGeneratorpromiseTRRARNOSG引用相同的函數。 請考慮以下聲明:

var a = (b = function() {});

這里ab指的是相同的功能。 這里的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM