Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匿名函数中的javascript奇怪行为_Javascript_Anonymous Function_Hoisting - Fatal编程技术网

匿名函数中的javascript奇怪行为

匿名函数中的javascript奇怪行为,javascript,anonymous-function,hoisting,Javascript,Anonymous Function,Hoisting,我有以下java脚本代码 var obj = (function(){ var privateVariable1 = 5; function privateFunction(){ alert(privateVariable1); } obj1 = {}; obj1.publicVariable = privateVariable1; obj1.publicFunction = function(){ privat

我有以下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,未定义。我不明白为什么它也没有定义。有人能告诉我为什么会发生这种行为吗

它向5发出警报,因为在
publicFunction
中调用
privateFunction
,这将向
privateVariable1
发出警报(在本例中为5)。由于您在警报中调用函数,
publicFunction
不会返回任何内容,因此在javascript中默认情况下,它将返回
undefined

函数返回
undefined
,并且您不会从
obj.publicFunction()
返回任何内容,因此它返回
undefined
,当你这样做的时候会被提醒

alert(obj.publicFunction());

publicFunction
privateFunction
都不返回值

改为:

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

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

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

    return obj1;

}());