Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数属性示例说明_Javascript - Fatal编程技术网

Javascript 函数属性示例说明

Javascript 函数属性示例说明,javascript,Javascript,我正在学习JS教程,遇到了以下示例: function makeCounter() { function counter() { return counter.count++; }; counter.count = 0; return counter; } let counter = makeCounter(); counter.count = 10; console.log(counter()) // logs 10 我不明白的是为什么它没有记录11而不是10?如

我正在学习JS教程,遇到了以下示例:

function makeCounter() {
  function counter() {
    return counter.count++;
  };
  counter.count = 0;

  return counter;
}

let counter = makeCounter();
counter.count = 10;
console.log(counter()) // logs 10

我不明白的是为什么它没有记录11而不是10?如果我们将
count
属性设置为
10
,并存储了增加
count
属性的
函数计数器
,那么为什么该属性不增加到11

您很了解函数属性。这与
++
的工作方式有关

return counter.count++
将返回
计数器。按当前值计数,然后递增,而不是相反。

因为您使用的是后缀递增运算符,它首先返回当前值,然后递增。您可以将其更改为前缀增加:

   return ++counter.count;

您的函数
makeCounter
正在返回一个函数,该函数可以访问
[[scope]]]
。它正在使用
闭包
。很明显,它是这样工作的

闭包:“当函数从调用它的地方记忆数据时”


进一步资料

计数器.count
打印
11
计数器()
将记录
10
,但
计数器.count
将记录
11
++
增量发生在返回值之后。如果您以前想要它,您可以编写
return++counter.count
。非常感谢,我不知道它这么简单。我想您错过了实际问题。