闭包内的长函数名

时间:2018-09-27 22:55:12

标签: javascript

我当时是reading this article,并试图理解此代码

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() {的操作,我无法理解。

有人可以帮助我理解这一行吗?我的意思是明确地指出那行代码/声明。

4 个答案:

答案 0 :(得分:3)

promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGeneratorpromiseTRRARNOSG都引用相同的功能。考虑以下语句:

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

此处ab引用相同的功能。这里的括号没有做任何特殊的事情。您可以通过以下方式重写语句:

var a = b = function() {};

此处的a被定义为常规变量,而b是全局变量。那个没用的长变量应该是一个注释。

答案 1 :(得分:2)

我认为没有必要使用promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator变量。不使用。

在功能上与

相同
d.getMonth()

答案 2 :(得分:2)

考虑如下匿名函数:

var promiseTRRARNOSG = function() {

但是作者为“调试目的”对该函数起了一个名字 获取在回溯中调用的方法名称 也许他/她尝试使用长方法名作为别名:

var promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator = function() { 
  return new Promise ...
}

var promiseTRRARNOSG = promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator;

但是后来改变了主意,就像这样:

var promiseTRRARNOSG = (
    promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator = function() { 
        return new Promise ...
    }
);

您可能会在a wonderfully entertaining video on preventing the JavaScript garbage collector from slowing down applications中看到这样的行:

  

让我们调用函数promiseTRRARNOSG,它是promiseThatResolvesRandomlyAfterRandomNumnberOfSecondsGenerator的别名。

答案 3 :(得分:1)

作者所做的工作是将一个匿名函数放在一个变量内,并且该函数具有一个返回变量。因此,该函数将返回一个值,该值将成为在其中声明该函数的变量的值。因此,如果我有一个变量:

var test = function(text) {
    return text + " " + text;
}

然后再添加一些这样的文本:

var words = test("words");

然后words的值为"words words"。这是jQuery之类的JavaScript框架中常见的概念。