Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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闭包的概念。我被困在练习的第二部分 问题是: 第1部分: 编写一条语句,在执行时绑定变量inc 一个函数,该函数接受一个数字(x)并返回该数字x+1 第二部分: 创建一个新文件counter.js,它导出up,不接受 参数,并且在第一次调用时返回1;第二次 调用,返回2;通常,在第n次调用返回时 N此函数不应直接使用任何算术运算符,而是 应使用inc. 我对第一部分的答复: // inc.js function plusOne(x){ return x+1; } mod

我正在学习JS闭包的概念。我被困在练习的第二部分

问题是:

第1部分: 编写一条语句,在执行时绑定变量inc 一个函数,该函数接受一个数字(x)并返回该数字x+1

第二部分:
创建一个新文件counter.js,它导出
up
,不接受 参数,并且在第一次调用时返回1;第二次 调用,返回2;通常,在第n次调用返回时 N此函数不应直接使用任何算术运算符,而是 应使用inc.

我对第一部分的答复:

// inc.js 

function plusOne(x){
    return x+1;
}
module.exports.plusOne = plusOne; 
我对第二部分的答复:

let inc = require('./inc.js')

function makeCounter(){
    let count = 0;
    return inc.plusOne(count);
};

let counter = makeCounter;

console.log( counter() ); // should execute 0 
console.log( counter() ); // should execute 1 
console.log( counter() ); // should execute 2
我对第二部分的回答显然不正确,因为我的3张照片都是“1”


对于同一个函数,我还有一个额外的问题(我不确定是否将其添加到这里或添加到我问的其他问题中)—— 在第2部分中,更改

let counter = makeCounter;


将生成一个错误。我将此作为一个单独的问题发布。但我对第2部分的回答是,makeCounter()确实返回一个函数
inc.plusOne(count)
,而不是字符串。为什么仍然存在错误

正如george所评论的,您的
makeCounter
函数应该通过返回一个闭包中带有mutating
count
变量的函数来创建闭包。这使得
计数
在函数调用之间存储其值。看起来是这样的:

function公司(x){
返回x+1;
}
函数makeCounter(){
让计数=0;
返回函数callsCenter(){
计数=inc(计数);
返回计数;
}
}
const myCounter=makeCounter()
console.log(myCounter())
console.log(myCounter())

console.log(myCounter())
makeCounter
应该返回一个递增和更新局部变量的函数。
let counter = makeCounter();