javascript - 如何访问此闭包返回值中的函数

标签 javascript function closures

<分区>

我正在尝试调用此闭包返回值中的任何函数,但我无法:

function count() {
  var x = 0;
  return {
    increment: function() { ++x; },
    decrement: function() { --x; },
    get: function() { return x; },
    reset: function() { x = 0; }
  }
}

我如何调用 say "increment()"以便它返回 "x"的增量值? 我试过:

  • var l = count();,然后 l.increment(); 返回 undefined!

最佳答案

您的函数有效,但没有返回任何内容。您必须使用 get() 来获取当前值:

function count() {
  var x = 0;
  return {
    increment: function() { ++x; },
    decrement: function() { --x; },
    get: function() { return x; },
    reset: function() { x = 0; }
  }
}

let test= count();
console.log(test.get());
test.increment();
console.log(test.get());
test.increment();
console.log(test.get());
test.decrement();
console.log(test.get());
test.reset();

console.log(test.get());

但是您可以在每个函数中返回新值:

function count() {
  var x = 0;
  return {
    increment: function() { return ++x; },
    decrement: function() { return --x; },
    get: function() { return x; },
    reset: function() { return x = 0; }
  }
}

let test= count();
console.log(test.get());
console.log(test.increment());
console.log(test.increment());
console.log(test.increment());

console.log(test.decrement());

console.log(test.reset());

关于javascript - 如何访问此闭包返回值中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56530186/

相关文章:

r - 闭包作为数据合并习语的解决方案

javascript - 如何使用 jsdoc-toolkit 记录匿名函数(闭包)

javascript - 如何使用firebug函数找到所选元素的xpath?

c++ - 更改函数中对静态变量的引用的值

javascript - 回调函数未按预期工作

c# - 本地函数与 Lambda C# 7.0

closures - 如何使用一个闭包作为另一个闭包的参数?

javascript - 要求用户选择 'boy' 或 'girl'

javascript - Protractor Javascript 未按顺序执行

javascript - 为什么 Typescript 不能推断可选参数的函数参数类型?