2014-10-10 81 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 
相关问题