为什么JavaScript Closure返回undefined

时间:2016-07-24 18:38:25

标签: javascript html

我知道一些非常基本的东西。但无法找到它的错误吗?

<!DOCTYPE html>
<html>
<body>

<p>A function can access variables defined inside the function:</p>

<button type="button" onclick="alert(makeMyCounter.increment)">Click Me!</button>

<p id="demo"></p>

<script>
    var makeMyCounter = function () {
        var privateCounter = 0; 


        return {
            increment : function() {
                privateCounter += 1;
            },
            decrement : function() {
                privateCounter += -1;
            }
        }
    }();


</script>

</body>

为什么privateCounter返回undefined?但是,当通过浏览器进行调试时,它被分配了1个。

3 个答案:

答案 0 :(得分:2)

privateCounter不是函数,因此它不会返回任何内容。

increment是一个函数,但你没有把()放在它之后,所以你没有调用它,它会提醒将函数转换为字符串的结果。

如果您要调用它(alert(makeMyCounter.increment());),那么它将返回undefined,因为它没有return语句。

答案 1 :(得分:2)

您正在使用方法引用作为属性,以便正确地使用它来调用方法:

makeMyCounter.increment()

接下来的事情你没有在方法中返回所以它将是未定义的。添加退货:

return {
        increment : function() {
            return privateCounter += 1;

        },
        decrement : function() {
            return privateCounter += -1;
        }
    }

答案 2 :(得分:1)

运行函数时,只需增加其值,但没有返回语句。

在javascript中,如果您的函数没有返回语句,则默认返回undefined

如果您需要privateCounterincrement函数中的新值decrement

    return {
        increment : function() {
            privateCounter += 1;
            return privateCounter;
        },
        decrement : function() {
            privateCounter += -1;
            return privateCounter;
        }
    }