2014-04-20 126 views
2

我有以下的Java腳本代碼JavaScript的奇怪行爲,匿名函數

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

    function privateFunction(){ 
     alert(privateVariable1); 
    } 

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

    return obj1; 

}()); 


alert(obj.publicFunction()); 

它警覺的5和不確定。我不明白爲什麼它的alert還未定義。誰能告訴我爲什麼會發生這種行爲?

回答

2

功能默認情況下,在JavaScript中返回undefined,你也不會從obj.publicFunction()返回任何東西,因此返回undefined,這就是被提醒,當你做

alert(obj.publicFunction()); 
1

它是警報5,因爲在publicFunction您撥打privateFunction,這將提醒privateVariable1(在這種情況下是5)。由於您在警報中調用了函數,並且publicFunction不返回任何內容,它將返回undefined

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; 

}());