我有这段代码(如下所示),当我编写 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 件事,
- 初始化 var c
- 返回一个函数,其中包含对在外部作用域中声明的变量
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()
时
警报('A!')
- 返回一个函数并将其分配给
x
;
下次当您调用x()
时,它始终会alert('B!')
希望这有帮助。
关于Javascript 函数(来自闭包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50424784/