Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Problemi con lo scope

  1. #1
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361

    Problemi con lo scope

    salve, ho un piccolo problemino.
    Utilizzo una libreria grafica in javascript e il costruttore deve essere eseguito per forza all'intenro di
    window.onload = function() {}

    ora, se dichiaro altre funzioni allinterno dello scope della function di window.onload tutto fila liscio, ma se queste le dichiaro fuori non posso richiamare gli elementi all'interno della function anonima..
    considerando che lo script che ho realizzato è davvero molto complesso, vorrei capire come posso fare per annullare questo problema di scope e non dover dichiarare per forza le nuove funzioni all'interno della function anonima

    spero di esser stato chiaro, magari è un problema stupido e banale ma dalle prove che ho fatto non ho tirato fuori nulla..

  2. #2
    Potresti postare un mini-esempio? Un codice del genere

    codice:
    <html>
      <script>
        function g() {
          alert("g()");
        }
    	
        window.onload = function() {
          g();
        } 
      </script>
      <body>
    	
      </body>
    </html>
    produce il risultato atteso.

  3. #3
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    Originariamente inviato da antotan
    Potresti postare un mini-esempio? Un codice del genere

    codice:
    <html>
      <script>
        function g() {
          alert("g()");
        }
    	
        window.onload = function() {
          g();
        } 
      </script>
      <body>
    	
      </body>
    </html>
    produce il risultato atteso.
    il problema è esattamente l'opposto:
    codice:
    <html>
      <script>
        window.onload = function() {
              function g() {
                   alert("g()");
              }
        }
        g(); //Non viene riconosciuta
      </script>
      <body>
    	
      </body>
    </html>
    il problema è che anche se inizializzo la funzione della libreria all'interno di window.onload, tutte le operazioni che compio su essa o su altri suoi oggetti devo richiamarmi all'interno di window onload, quindi volevo capire come posso rendere queste funzioni/variabili "globali"


  4. #4
    Originariamente inviato da LuckySevenRoX
    il problema è esattamente l'opposto:
    codice:
    <html>
      <script>
        window.onload = function() {
              function g() {
                   alert("g()");
              }
        }
        g(); //Non viene riconosciuta
      </script>
      <body>
    	
      </body>
    </html>
    Le function fanno scope quindi g fa parte dello scope locale della funzione anonima, di conseguenza è giusto che non sia possibile utilizzarla fuori da lì.

    Non ho idea di come sarà il flusso del tuo programma (da questo dipende la soluzione). Potresti banalmente fare così:

    codice:
    <html>
      <script>
        var pencil = null;
    	
        function initAll() {
          // lib init code here
          pencil = {
            draw : function() {
    	  console.log("drawing...");
    	}
          };
        }
    	
        window.onload = initAll;
        
        function draw() {
          pencil.draw();
        }
      </script>
    </html>
    Niente funzione anonima ma usi una funzione sullo scope globale. Qualcosa del genere potrebbe andare nel tuo caso?


  5. #5
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    purtroppo no, ho provato tutte le combinazioni possibili (è che ormai siamo sulle 1000 righe di codice.. quindi mesà tanto che per risolvere il tutto dobbiamo ricominciare dalle fondamenta appena abbiamo tempo.. adesso si continua così).. volevo sapere se c'era 1 modo x rendere globale una funz privata ma allora nada.. grazie lo stesso!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    scusate ma qual'è l'utilità di creare una funzione all'interno dell'evento load(quindi di una funzione anonima)? cioè richiamare una funzione/costruttore è un conto ma tu la stai proprio definendo all'interno, non capisco a cosa possa servire, quoto quanto avevi scritto nel primo post:

    Utilizzo una libreria grafica in javascript e il costruttore deve essere eseguito per forza all'intenro di
    window.onload = function() {}
    A me sembra ci sia un errore logico di base

  7. #7
    Originariamente inviato da LuckySevenRoX
    purtroppo no, ho provato tutte le combinazioni possibili (è che ormai siamo sulle 1000 righe di codice.. quindi mesà tanto che per risolvere il tutto dobbiamo ricominciare dalle fondamenta appena abbiamo tempo.. adesso si continua così).. volevo sapere se c'era 1 modo x rendere globale una funz privata ma allora nada.. grazie lo stesso!
    Secondo me se siete sulle 1k righe vi conviene lavorare di taglia-incolla e rimediare ora (non dovrebbe essere lungo/duro come lavoro, vi basta spostare le definizioni dalla funzione anonima allo scope globale).
    Secondo me potrebbe farvi anche comodo, se pensate di sviluppare qualcosa di grosso, di iniziare a strutturare il vostro programma, passando all'utilizzo di object e istanze di function.

    Originariamente inviato da Vindav
    ...cioè richiamare una funzione/costruttore è un conto ma tu la stai proprio definendo all'interno...
    A me sembra ci sia un errore logico di base
    Quoto


  8. #8
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    praticamente è successo questo.. un piccolo script che doveva essere di un centinaio di righe è stato elaborato sempre di più.. il problema di fondo è questo
    var libgrafica = new blabla();
    fuori da window.onload non funge e se cerco di creare la variabile fuori dal window onload e creare l'oggetto dentro va bene, l'oggetto viene creato MA fuori dal window onload non posso comunque utilizzare la variabile libgrafica (è come se fosse vuota).. ho provato a sostituire con il document.ready di jquery ma ancora niente.. purtroppo questa particolare libreria mi costringe a lavorare completamente dentro lo scope del window onload

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    mah a me quanto dici mi suona veramente strano, fai una cosa sposta l'istruzione "var libgrafica = new blabla();" come ultima riga di codice della pagina e dicci se ti da lo stesso problema...

  10. #10
    Originariamente inviato da LuckySevenRoX
    se cerco di creare la variabile fuori dal window onload e creare l'oggetto dentro va bene, l'oggetto viene creato MA fuori dal window onload non posso comunque utilizzare la variabile libgrafica (è come se fosse vuota)
    Cioè intendi questo?

    codice:
    <html>
      <script>
        var libgrafica;
        window.onload = function() {
           libgrafica = new blabla();
        }
    
        function someFunc() {
          libgrafica.method();
        }
      </script>
      <body>
    	
      </body>
    </html>
    Che problemi ti si presentano?
    Vien da se che quella variabile non puoi usarla prima che la onload sia partita, altrimenti la variabile sarebbe undefined.

    I discorsi dei post precedenti rimangono comunque.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.