2012-02-14 4 views
0

Très bien ... alors il y a quelques choses qui se passent ici. D'abord, j'essaye de créer un objet global appelé myScrolls. Deuxièmement, j'essaie de définir la valeur de cet objet global dans une fonction de chargement jQuery. Troisièmement, j'essaie d'accéder à l'objet myScrolls en dehors de l'objet de chargement.Javascript Portée des boucles "for"

Qu'est-ce qui me manque? Les boucles «for» ont-elles une portée limitée? Merci

myScrolls=new Object(); 

$(window).load(function() { 

    var projectCount = 5; 

    for (var i=0;i<=projectCount;i++) 
    { 
     var singleProject = 'project_' + i; 
     myScrolls[singleProject] = new iScroll(singleProject, horizontalPreferences); 
    } 

}); 

console.log(myScrolls); 
+0

Le paramètre 'horizontalPreferences' n'a pas été déclaré ou initialisé et déclenchera une erreur de référence. En outre, vous ne décrivez pas l'erreur que vous voyez. Autre que cela noté, vous ne devriez pas voir d'erreur. 'myScrolls' est une référence à un objet. – RobG

Répondre

4

Vous essayez de lire l'objet avant le rappel load exécute.

+0

Je pense que cela fait partie du problème, mais cela ne fonctionne toujours pas si je place 'console.log' dans le rappel' load'. Cependant, cela fonctionne si 'console.log' est placé dans la boucle' for'. – coryetzkorn

+0

Comment ça ne marche pas? Ce qui se produit? – SLaks

+0

Ahhh ... je l'ai. Ça marche maintenant. Merci! – coryetzkorn

0

Cette fonction $ (window) .load() attend jusqu'à ce que la fenêtre soit chargée, et parce que le journal de la console n'est pas également dans ce rappel, il est effectivement exécuté avant que la fonction ne le fasse. Ainsi, au moment où l'instruction console s'exécute, elle n'est pas réellement remplie.

myScrolls=new Object(); 

$(window).load(function() { 

    var projectCount = 5; 

    for (var i=0;i<=projectCount;i++) 
    { 
     var singleProject = 'project_' + i; 
     myScrolls[singleProject] = new iScroll(singleProject, horizontalPreferences); 
    } 

    console.log(myScrolls); //this was out of scope when outside of $(window).load() 

}); 
+0

Hmmm .. qui ne fonctionne toujours pas. Cependant, c'est le cas si 'console.log' est placé dans la boucle' for'. Est-ce que toute la boucle 'for' devrait s'exécuter avant de poursuivre le' console.log (myScrolls) '? – coryetzkorn

+0

oui ils devraient. – Kristian