我有这个代码(如下所示),当我写c1 = count();
时,我调用函数count()
(我目前的理解),所以闭包将在第一次调用后记住c = 1。
稍后,如果我调用c1()
,结果为1.如果我通过编写c1=count()
调用此函数一次,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();
答案 0 :(得分:4)
这是你的功能,
function count() {
var c = 0 ;
return function() {
c += 1 ;
return c ;
};
}
第一次调用函数count()
时,它会做两件事,
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()
alert('A!')
x
; 下次当您致电x()
时,它始终会alert('B!')
希望这有帮助。
答案 1 :(得分:1)
当您致电count
时,您将从[{1}}中存储的count
返回内部函数:
c1
但当时你还没有调用返回的函数,因此return function() {
c += 1 ;
return c ;
};
仍为c
。
当您现在通过编写0
调用存储在c1
中的返回函数时,c1
会增加c
,因此第一次调用1
你得到c1
。
1

答案 2 :(得分:-1)
function count() {
var c = 0 ;
return function() {
c += 1 ;
return c ;
};
}
每次调用该函数时,都将值设置为0 - 所以它总是返回一个。而是将其称为增量计数,并将值递增到:
function incrementCount(valToInc) {
return valToInc += 1;
}
incrementCount(4); //returns 5