Javascript 函数(来自闭包)

标签 javascript closures

我有这段代码(如下所示),当我编写 c1 = count(); 时,我调用函数 count() (我目前的理解),所以闭包将在第一次调用后记住 c=1。

后来,如果我调用c1(),结果是1。如果我通过编写c1=count()调用这个函数一次,结果怎么会是1呢? code>, c 已增加到 1?该值不应该是2吗?

function count() {
    var c = 0 ;
    return function() {
        c += 1 ;
        return c ;
    };
}

如果没有,

为什么当我编写这个函数时,我的输出是“A!”?这意味着通过编写 var x=a() 我调用该函数,上面的函数中应该使用相同的逻辑,不是吗?

function a() {
  alert('A!');
  return function() {
    alert('B!');
  };
};
var x = a();

最佳答案

这是你的函数,

function count() {  
 var c = 0 ;
 return function() {
   c += 1 ;
   return c ;
 };
}

第一次调用函数 count() 时,它会执行 2 件事,

  1. 初始化 var c
  2. 返回一个函数,其中包含对在外部作用域中声明的变量c的引用。 (了解更多关于闭包的信息:这是一篇好文章https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-closure-b2f0d2152b36)

现在返回 count() 的值,即返回函数被分配给变量 c1。 c1 是一个函数,当您调用它时,它会递增变量 c 的值。

当你这样做时,

var c1 = count(); // c = 0 & a function is assigned to c1
c1(); // c + 1 i.e 1
c1(); // c = 2

等等..

现在是下一个案例,

function a() {
  alert('A!');
  return function() {
    alert('B!');
  };
};
var x = a();

当你调用a()

  1. 警报('A!')
  2. 返回一个函数并将其分配给x

下次当您调用x()时,它始终会alert('B!')

希望这有帮助。

关于Javascript 函数(来自闭包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50424784/

相关文章:

javascript - JS 范围访问

c# - 在 C# 中的循环中捕获变量

javascript - 声明无限对象的 JavaScript 数组

javascript - 如何判断 Meteor minimongo 何时与 mongo 服务器同步

javascript - 在 Node 中使用 'return {value}' 是否合适?

java - Java 中的闭包将如何替换/增强接口(interface)?

闭包中的 Javascript 实例化。如何让Factory和Model独立?

javascript - 如何通过 Accordion 显示数据表

javascript - TypeScript:为什么我的过滤方法无法缩小类型并从数组中消除未定义和错误

javascript - 可能访问修改后的关闭问题...如何击败?