在定义它的函数调用之外调用函数

时间:2021-06-11 18:25:19

标签: javascript closures

我正在尝试记录 myNewFunction(),结果显示未定义。

function outer() {
  let counter = 0;

  function incrementCounter() {
    counter++
  }
  return incrementCounter;
}

const myNewFunction = outer();

console.log(myNewFunction())
console.log(myNewFunction())
console.log(myNewFunction())

3 个答案:

答案 0 :(得分:0)

正如我在运行您的代码后能够得到的那样,该代码表明您想要调用 myNewfunction 的函数未在该块中定义。 你要先介绍,然后用。

{ "message": "ReferenceError: myNewFunction 未定义", "文件名": "https://stacksnippets.net/js", "lineno": 21, “科诺”:1 }

答案 1 :(得分:0)

传递值时您不需要实际调用该函数。如果你想获得计数器值。应该退货。而不是在您的示例中返回 incrementCounter() 函数。我还建议与全球相反。避免每次调用 myNewFunction() 时计数器重置。

let counter = 0;

function outer() {
  function incrementCounter() {
    counter++
  }
  incrementCounter();
  return counter;
}

const myNewFunction = outer;

console.log(myNewFunction())
console.log(myNewFunction())
console.log(myNewFunction())

答案 2 :(得分:0)

<块引用>

我正在尝试记录 myNewFunction(),结果显示未定义。

因为与 myNewFunction 相同的 incrementCounter 不返回任何内容:

  function incrementCounter() {
    counter++
    // no return statement here
  }

如果没有明确的 return 语句,函数返回 undefined。如果您希望它返回 counter 的新值,请执行此操作。

function outer() {
  let counter = 0;

  function incrementCounter() {
    counter++;
    return counter;
  }
  return incrementCounter;
}

const myNewFunction = outer();

console.log(myNewFunction())
console.log(myNewFunction())
console.log(myNewFunction())