Javascript范围问题

时间:2010-09-30 10:52:02

标签: javascript

很抱歉,但如何从 someFunction ()访问 myFunction()

<script>
$(document).ready(function() {
    // Get messages
    var myFunction = function() {
      // doSth.
    }

    // Make the initial call on page load.
    myFunction();
);

function someFunction() {
    // Call the function a second time 
    myFunction();  // Call fails!
}
</script>

4 个答案:

答案 0 :(得分:4)

您正在使用传递给ready方法的匿名函数。只需将定义移到该函数之外。

答案 1 :(得分:1)

它更像是一个范围问题。是的,您正在使用匿名函数,但即使您通过删除这样的var使其全局化:

$(document).ready(function() {
     // gets defined AFTER THE DOM IS READY
     myFunction = function() {
      // doSth.
     }
}

// is called BEFORE THE DOM IS READY
myFunction();

它仍然不起作用,因为在调用someFunction时尚未定义myFunction。 someFunction在文档准备好之前立即运行,这是在定义myFunction之前。

这两个函数都需要位于文档就绪块中,或者位于文档就绪块之外。如果你需要操作DOM元素,我建议在里面。

如果为处理程序调用{​​{1}},您可以从someFunction中删除var声明,它将按预期工作,因为这会将myFunction放入全局范围。

答案 2 :(得分:1)

我认为这不会起作用,因为在dom准备好并且文档'ready'事件被触发之前,将不会创建'myFunction'函数。对'myFunction'的第二次调用发生在'myFunction'创建之前。即使您在全局命名空间中创建函数'myFunction',这种情况也会失败。

如果您未在'myFunction'中使用任何闭包值,则可以将此函数移动到全局命名空间。这将解决你的问题。 例如:

var myFunction = function(){
    //Do somthing
}

$(document).ready(function(){
    myFunction();
});


myFunction()

答案 3 :(得分:0)

我认为您无法使用当前代码调用myfunction()。您必须从function() { var myfunction = ... };中获取document.ready().分离方法,然后您可以调用myFunction。