匿名函数中的javascript奇怪行为

时间:2014-04-20 16:14:46

标签: javascript anonymous-function hoisting

我有以下java脚本代码

var obj = (function(){
    var privateVariable1 = 5;

    function privateFunction(){
        alert(privateVariable1);
    }

    obj1 = {};
    obj1.publicVariable = privateVariable1;
    obj1.publicFunction = function(){
        privateFunction();
    }

    return obj1;

}());


alert(obj.publicFunction());

警报5并且未定义。我不明白为什么它也会发出警报。谁能告诉我为什么会发生这种情况?

3 个答案:

答案 0 :(得分:2)

默认情况下,javascript中的函数会返回undefined,并且您不会从obj.publicFunction()返回任何内容,因此会返回undefined,这是您执行时提醒的内容

alert(obj.publicFunction());

答案 1 :(得分:2)

publicFunctionprivateFunction都不会返回值。

更改为:

var obj = (function(){
    var privateVariable1 = 5;

    function privateFunction(){
        alert(privateVariable1);
        return privateVariable1;
    }

    obj1 = {};
    obj1.publicVariable = privateVariable1;
    obj1.publicFunction = function(){
        return privateFunction();
    }

    return obj1;

}());

答案 2 :(得分:1)

警告5,因为在publicFunction中您调用了privateFunction,这将提醒privateVariable1(在这种情况下为5)。由于您在警报中调用了您的函数,并且publicFunction没有返回任何内容,因此会返回undefined