Search code examples
javascriptglobal-variablesundefinedglobalscopes

Can't get global variable


Here is the window:enter image description here so now, when I scroll down (the children appear in the same fashion as displayed above, all way long), I see what I want:enter image description here but I just fail to access it. Why?

Here the code, in a function that lies in a js folder:

function update_match(slot, match, s) {
    $("#match" + slot + " i").text(match);
    console.log(window);
    console.log(window.saves1);          // undefined
    console.log(window.external.saves1); // undefined
    (slot == 1) ? window.saves1.item = s : window.saves2.item = s;
}

The variables are created like this:

function set_global(name, pos, ab, needSave, s) {
    window.saves1 = {item: s};
    window.saves2 = {item: s};
}

inside js/main.js file.

The file structure is like this:

index.php (where the php code runs and calls update_match())
js - main.js
   - read_match.js

Solution

  • You are running update_match too early.

    It seems that while you are running the update_match, the global variables aren't defined yet. They are created later. But because console.log, does not echo out a snapshot of the window object at that time, it shows the global variables, because at the end of your script they got created and console.log shows the "finished" window Object.

    To solve your issue, run the update_match later, either after the document is ready or using the setTimeout function with a reasonable delay:

    setTimeout(function(){ update_match(); }, 500);
    

    To run the function after the document is ready, take look at this post:

    jQuery Mobile: document ready vs page events

    You could do it by:

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