
Originariamente inviata da
KillerWorm
In JavaScript le variabili non esplicitamente dichiarate vengono dichiarate automaticamente a livello globale, accessibili quindi da qualsiasi ambito di visibilità, cioè da qualsiasi punto nello script.
Per limitare questo tipo di problematiche si può forzare l'interprete JavaScript ad usare la modalità rigorosa (strict mode).
Ti è sufficiente inserire la stringa testuale
'use strict'; ad inizio script o ad inizio funzione per attivare questa modalità rispettivamente nell'intero script o per la specifica funzione.
Questo ti costringe chiaramente ad usare una sintassi più rigida ma ti permette di ottenere, tra le altre cose, un debug più preciso perché vengono segnalati errori (come l'omissione di
var, nel tuo caso) che altrimenti, in modalità normale, non verrebbero segnalati.
Vedi alcuni riferimenti per approfondire:
Modalità Strict
Debug veloce con ECMAScript Strict Mode
Strict mode in Javascript
Strict mode
Non so ma tutto il passaggio si può semplificare molto. Qui un esempio di come lo imposterei io, usando il metodo
map() per ciclare i vari
nodiSub.
codice:
<script>
'use strict';
function costruisciExp(str){
var j = JSON.parse(str)[0];
console.log(generaAlbero(j));
}
function generaAlbero(j){
return j.valore + (j.nodiSub.length ? '(' + j.nodiSub.map(j=>generaAlbero(j)).join(',') + ')' : '');
}
var prova = '[{"valore":"DECODE","nodiSub":[{"valore":"TRIM","nodiSub":[{"valore":"DESCRIZIONE","nodiSub":[]}]},{"valore":"\'\'","nodiSub":[]},{"valore":"DOMINIO","nodiSub":[]},{"valore":"TRIM","nodiSub":[{"valore":"DESCRIZIONE","nodiSub":[]}]}]}]';
costruisciExp(prova);
</script>
Non mi pare ci sia molto da spiegare ma se hai bisogno di chiarimenti chiedi pure
