function counter() {
var n = 0;
return function counter() {
n += 1;
return n;
}
}
var count = counter();
console.log('counter() returns: ' + count);
console.log('invoking the function returns: ' + count());
console.log('invoking the function returns: ' + count());
console.log('invoking the function returns: ' + count());
此函数返回一个数字,每次调用该函数时,该函数返回一个比之前的数字“一”的数字。
此代码的问题是:
console.log('counter() returns: + count);
这将打印打印的计数器的内部功能的实际代码
function counter(){ n+= 1; return n; }
而不是0.无论如何要解决它?其他控制台语句打印正确,打印出1 2 3
答案 0 :(得分:0)
在第一种情况下,您获得的输出是函数定义,因为您通过分配var count = counter()
将函数返回到varibale。您需要调用count()
之类的计数,以便它执行函数定义
console.log('counter() returns: ' + count());
如果您要打印0
,则需要初始化var n = -1
,否则您的结果将从1
开始,因为它的值会递增然后返回
function counter() {
var n = -1;
return function counter() {
n += 1;
return n;
}
}
var count = counter();
console.log('counter() returns: ' + count());
console.log('invoking the function returns: ' + count());
console.log('invoking the function returns: ' + count());
console.log('invoking the function returns: ' + count());

答案 1 :(得分:0)
您的代码无法打印0
,因为该值在返回之前会递增。如果您希望返回的第一个号码为0
,请从-1
开始。
function counter() {
var n = -1;
return function () {
n += 1;
return n;
};
}
var count = counter();
console.log('counter() returns: ' + count);
console.log('invoking the function returns: ' + count());
console.log('invoking the function returns: ' + count());
console.log('invoking the function returns: ' + count());
console.log(count)
将函数本身打印到控制台。这是预期的。