多次调用函数,但第一次打印出奇怪的东西

时间:2017-02-06 03:26:57

标签: javascript

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

2 个答案:

答案 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)将函数本身打印到控制台。这是预期的。