2014-10-10 132 views
0

我需要從window.onload事件中執行一個函數。但是我想運行的函數位於另一個函數的函數中。 我知道我可以通過是否有可能在另一個函數中運行'2-deep'的函數?

function1(){ 
    function2(); 
} 

function2(){ 
    ...a process... 
} 

運行從另一個函數的函數,但因爲我不能這個「整體」功能中運行window.onload事件,因爲它必須在「頂層」。 我試過這樣做,但它沒有工作,但基本上我認爲這是我想要做的。

<script> 
function(){ 

    function1(){ 
     ..some stuff.. 
    } 

    function2(){ 
     function1(); 
    } 
} 

window.onload = function2; 

</script> 

因爲它是由一個對象onclick事件綁定我不能簡單地運行從window.onload事件功能1。

任何建議,我如何解決這個問題?

+0

'function2'必須位於外部函數內部,可能是因爲它訪問了一些私有的詞法範圍狀態? – Alnitak 2014-10-10 10:21:04

+0

@Alnitak是的,因爲外部函數包含許多函數,其中一些依賴於彼此在相同的'空間'中。該應用程序是一個谷歌geochart,其中包含此外部函數內的所有選項和其他東西。 – user3663720 2014-10-10 10:39:34

回答

0

您應該學習和學習不同的Javascript模式,以便您以可預測的方式構建代碼。

http://addyosmani.com/resources/essentialjsdesignpatterns/book/是一個了不起的資源,並會告訴你你需要知道的事情。

每種模式都詳細說明了實施方式,優點和缺點。

這裏是一個使用模塊模式的一個例子:

// Global module 
var myModule = (function() { 

    function privateMethod1() { 
     ... 
    } 

    function privateMethod2() { 
     ... 
    } 

    return { 
     publicMethod: function(){ 
      privateMethod1(); 
     } 
    }; 

})(); 

myModule.publicMethod(); 
0

這裏有一個可能性:

window.onload = (function(){ 

    function1(){ 
     ..some stuff.. 
    } 

    function2(){ 
     function1(); 
    } 

    return function2; 
})(); 
0

只要你自己調用外部函數,沒有理由將分配給window.onload不能發生即:

(function(){ 

    function1() { 
     ..some stuff.. 
    } 

    function2() { 
     function1(); 
    } 

    window.onload = function2; 

})(); // immediately invoked function expression 
相關問題