开发者

Javascript Scope Problem

开发者 https://www.devze.com 2023-01-18 17:43 出处:网络
Sorry for asking, but how do I access myFunction() from someFunction()? <script> $(document).ready(function() {

Sorry for asking, but how do I access myFunction() from someFunction()?

<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>


You are scoping it to the anonymous function you are passing to the ready method. Just move the definition outside that function.


Its more then a scope issue. Yes, you are scoping it to the anonymous function but even if you make it global by removing the var like this:

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

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

It STILL won't work, because myFunction hasn't been defined by the time you call someFunction. someFunction is running immediately before the document is ready, which is BEFORE myFunction is defined.

Both functions need to be either in the document ready block, or outside it. If you need to manipulate DOM elements, I'd recommend inside.

If someFunction is called for a handler, you can remove the var declaration from myFunction and it will work as expected, because this will put myFunction in the global scope.


I don't think this will work because till the dom becomes ready and the document 'ready' event is fired the 'myFunction' function will not be created. The second call to 'myFunction' happens much before the 'myFunction' is created. This case will fail even if you create the function 'myFunction' in global namespace.

If you are not using any closure values inside your 'myFunction', you can move this function to global namespace. This will solve your ploblem. Ex:

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

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


myFunction()


I think you wont be able to call myfunction() with your current code. You will have to get that function() { var myfunction = ... }; out of document.ready(). Seperate the method, then you can call myFunction.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号