Variabile Let non la vedo nel DOM, perché ?

di il
6 risposte

Variabile Let non la vedo nel DOM, perché ?

Ciao,
ho fatto questa prova:
<html><head>
<title>Esempio 1</title>
<body>
  <script>
  "use strict";
  var Pippo = 1;
  let Pippo2 = 2;
  Pippo2 = Pippo2 + 3;
  console.log(Pippo2);
  for(let b in window) {
  if(window.hasOwnProperty(b)) console.log(b);
}
  </script>
</body>
</html>
ma in console.log vedo la variabile Pippo (una var),
ma non vedo la variabile Pippo2 (una let).

Come se nel DOM non esista, eppure la ho utilizzata.. mi spiegate cortesemente ?

6 Risposte

  • Re: Variabile Let non la vedo nel DOM, perché ?

    Https://www.w3schools.com/js/js_let.as
    Le variabili dichiarate var appartengono all'oggetto window
    Le variabili dichiarate let NON appartengono all'oggetto window
  • Re: Variabile Let non la vedo nel DOM, perché ?

    Ciao shodan,
    So che una variabile Let è raggiungibile solo all'interno di un blocco { }, per cui ti faccio una ulteriore domanda a cui non riesco trovare risposta al mio dilemma.

    Faccio questo esempio pratico.

    Avvio il browser e gli faccio caricare l'html sopra descritto.
    Quando il browser ha finito il caricamento (per cui è stato eseguito tutto, script compresi), la variabile let è lavorata dal Garbage Collector perché, appunto, essendo usciti dal blocco { } non ha più riferimenti (cioè non c'è più nessuno che usa la variabile let in questione) ???

    E per cui non occupa più memoria nel browser ?

    Scusami se ne approfitto ma vorrei approfondire una volta per tutte e levarmi questo dubbio..

    Grazie.
  • Re: Variabile Let non la vedo nel DOM, perché ?

    la variabile let è lavorata dal Garbage Collector
    Non è più accessibile, questo si; ma le se variabili escono di scope (a prescindere dalla dichiarazione) il garbage collector può tenersele in memoria quanto gli pare.
  • Re: Variabile Let non la vedo nel DOM, perché ?

    jockerfox ha scritto:


    ho fatto questa prova:
    [...]
    ma in console.log vedo la variabile Pippo (una var),
    ma non vedo la variabile Pippo2 (una let).
    Usando il tuo esempio di codice così com'è, io la variabile la vedo stampata nella console (appare il valore 5), esattamente come mi aspetterei, e come ti aspetti anche tu. Siamo sicuri che il codice non sia stato modificato?

    jockerfox ha scritto:


    Come se nel DOM non esista, eppure la ho utilizzata..
    Alt... il DOM è un'altra cosa: è accessibile tramite window.document e rappresenta gli oggetti che sono raffigurati nella pagina, organizzati come una gerarchia di nodi, e non ha nulla a che vedere con le variabili in quanto tali.

    Ciao!
  • Re: Variabile Let non la vedo nel DOM, perché ?

    Ciao.
    L'esempio che avevo riportato era per facilitarmi la comprensione senza dover addentrarmi nel vero codice.

    L'applicazione utilizza Leaflet.
    Vengono creati 5000+ oggetti tra polygoni, circle, marker, ecc..

    Sempre per facilitare la domanda / risposta, presumiamo che abbia 1000 marker come segue da codice:
    function () {
      for (i=0; i<1000; i++) {
        var mioMarker = L.marker([51.5, -0.09]).addTo(mymap);
        ..altro codice che fa riferimento a mioMarker //qua ho altre funzioni che vengono richiamate dal menù contestuale (tasto destro sul 
    marker), ed ovviamente per tutto il ciclo di vita della pagina html caricata
      }
    }
    Il codice sopra potrei anche scriverlo come segue:
    function () {
      for (i=0; i<1000; i++) {
        let mioMarker = L.marker([51.5, -0.09]).addTo(mymap);
        ..altro codice che fa riferimento a mioMarker //qua ho altre funzioni che vengono richiamate dal menù contestuale (tasto destro sul 
    marker), ed ovviamente per tutto il ciclo di vita della pagina html caricata
      }
    }
    Per cui ecco "svelato" la motivazione della mia domanda nel primo post.

    I marker creati con let hanno il menù contestuale che avvia delle funzioni. Queste funzioni fanno riferimento alla variabile let (mioMarker).

    Come faccio a sapere se le mie 1000+ let mioMarker (ovviamente a pagina html finita caricamento) le variabili let occupano spazio nella memoria del browser ?

    Perché allora tanto vale dichiararle var e non let !, e mi complico meno la vita con il codice nelle funzioni ed altro.

    Grazie.
  • Re: Variabile Let non la vedo nel DOM, perché ?

    jockerfox ha scritto:


    L'esempio che avevo riportato era per facilitarmi la comprensione senza dover addentrarmi nel vero codice.
    Tu devi riportare esattamente il codice che da l'errore che denunci: se lo modifichi per tua "comodità", innanzitutto non possiamo vedere gli errori perché stai riportando una versione diversa da quella che hai scritto, e dato che chiedi aiuto, non hai la certezza di aver rimosso qualcosa che non abbia a che fare col problema.

    jockerfox ha scritto:


    Sempre per facilitare la domanda / risposta, presumiamo che abbia 1000 marker come segue da codice [...]
    Per cui ecco "svelato" la motivazione della mia domanda nel primo post.
    Sarà anche "svelato", ma io non ci ho capito proprio niente di quello che stai chiedendo.

    jockerfox ha scritto:


    I marker creati con let hanno il menù contestuale che avvia delle funzioni. Queste funzioni fanno riferimento alla variabile let (mioMarker).
    Quando dici che il menu "avvia delle funzioni", stai dicendo che ci sono dei callback?

    jockerfox ha scritto:


    Come faccio a sapere se le mie 1000+ let mioMarker (ovviamente a pagina html finita caricamento) le variabili let occupano spazio nella memoria del browser ?
    Quello che occupa spazio sono gli oggetti che vengono inizializzati: se vi sono funzioni che fanno riferimento alle variabili e ne prolungano la vita perché "catturano il contesto", lo faranno a prescindere da come la variabile è stata dichiarata.

    jockerfox ha scritto:


    Perché allora tanto vale dichiararle var e non let !, e mi complico meno la vita con il codice nelle funzioni ed altro.
    Non vedo come l'uso di var o let possa complicare o semplificare il codice, visto che la sintassi è identica e cambia una parola chiave per delimitarne lo scope.

    Comunque, finché non chiarisci a cosa ti stai riferendo e non posti del codice da analizzare senza rimuovere e trasformare in commento proprio la parte in cui usi la variabile che dichiari, non è che si capisca e/o si possa dire molto in merito.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
6 risposte