-
Mattia renditi utileScritto daNon Autenticatoil 2020-02-20 00:33:53.0 alle 2020-02-20 00:33:53.0Come mai il risultato di queste due funzioni Javascript è diverso?
function a(n, k, x) { z = 0; for (j = 2; j <= n; j++) { z = z + delta(n, j*k, x); } return (0 + z); } function a(n, k, x) { z = 0; for (j = 2; j <= n; j++) { z = delta(n, j*k, x) + z; } return (0 + z); }
La prima esegue la somma dei valori di delta(n, j*k, x) per j da 2 a n, la seconda no.
Funzioni simili dove invece della somma si fa un prodotto non mostrano differenze cambiando l'ordine dei fattori.-
Re: Mattia renditi utileScritto da:
> Come mai il risultato di queste due funzioni Javascript è diverso?
>
>function a(n, k, x) { > z = 0; > for (j = 2; j <= n; j++) { > z = z + delta(n, j*k, x); > } > return (0 + z); > } > > function a(n, k, x) { > z = 0; > for (j = 2; j <= n; j++) { > z = delta(n, j*k, x) + z; > } > return (0 + z); > }
> La prima esegue la somma dei valori di delta(n, j*k, x) per j da 2 a n, la seconda no.
> Funzioni simili dove invece della somma si fa un prodotto non mostrano differenze cambiando l'ordine dei fattori.
Posta anche la funzione delta.-
Re: Mattia renditi utileScritto daNon Autenticatoil 2020-02-20 11:18:14.0 alle 2020-02-20 11:18:14.0Scritto da: Mattia
> Scritto da:
> > Come mai il risultato di queste due funzioni Javascript è diverso?
> >
> >function a(n, k, x) { > > z = 0; > > for (j = 2; j <= n; j++) { > > z = z + delta(n, j*k, x); > > } > > return (0 + z); > > } > > > > function a(n, k, x) { > > z = 0; > > for (j = 2; j <= n; j++) { > > z = delta(n, j*k, x) + z; > > } > > return (0 + z); > > }
> > La prima esegue la somma dei valori di delta(n, j*k, x) per j da 2 a n, la seconda no.
> > Funzioni simili dove invece della somma si fa un prodotto non mostrano differenze cambiando l'ordine dei fattori.
>
> Posta anche la funzione delta.
È un po' complesso, spero non manchi niente.
Per il quadro completo bisogna andare su
http://www1.chapman.edu/~jipsen/svg/asciisvgeditor...
scaricare la pagina con tutti gli annessi, aggiungerci nell'HEAD la riga
<script type="text/javascript" src="myfunctions.js"></script>
Avevo poi aggiunto istruzioni, suggerite dalla suora, per mostrare il sorgente del SVG prodotto in una TEXTAREA.
Lo script myfunctions.js definisce alcune funzionifunction fatt(n) { var i,f f=1 for(i = n; i > 1; i--) { f=f*i } return(f) } function delta2(n, j, x) { y = 1; z = 1; for (i = 1; i < j; i++) { y = (x - i)*y; } for (i = j + 1; i <= n; i++) { z = (x - i)*z; } z = z*y z = z * (-1)**(n - j) / ( fatt(j - 1) * fatt(n - j) ) return z; } function delta4(n, j, x) { y = 1; z = 1; for (i = 1; i < j; i++) { y = y*(x - i); } for (i = j + 1; i <= n; i++) { z = z*(x - i); } z = z*y z = z * (-1)**(n - j) / ( fatt(j - 1) * fatt(n - j) ) return z; } function delta(n, j, x) { return delta2(n, j, x); } function a(n, k, x) { z = 0; for (j = 2; j <= n; j++) { z = z + delta(n, j*k, x); } return (0 + z); }
La funzione delta si può definire al volo delta come delta2 o delta4 per vedere se cambia qualcosa. Differiscono per l'ordine dei fattori nel ciclo ma il risultato non cambia.
Nella funzione a invece stranamente l'ordine degli addendi conta.
L'istruzione return(0 + z) è perché poi dovrò aggiungere a z un valore costante, momentaneamente azzerato per il debugging.
Nel riquadro della pagina con le istruzioni si mettesetBorder(1) initPicture(-1,12, -2, 2) axes(1, 1, "labels", 1, 1) stroke = "blue" plot("delta(10, 4, x)") plot("a(10, 5, x)")
dove plot è una funzione definita dall'autore della pagina, che suppongo priva di bachi perché con questa pagina ho disegnato funzioni su funzioni quando creavo le figure per la tesi di laurea, senza mai notare anomalie.
Puoi cambiare i parametri nelle funzioni delta ed a per vedere come cambia il grafico. Per la delta ne ho esaminate parecchie, per la a devo ancora farlo perché avevo il problema che non dava i risultati attesi, risolto cambiando l'ordine degli addendi.
Potrei pensare che
z = delta(n, j*k, x) + z
calcoli delta, assegni tale valore a z e poi ci sommi z, che avendo assunto tale valore risulta in due volte delta, e che invece
z = z + delta(n, j*k, x)
assegni a z il valore del ciclo precedente e poi vi somma delta, che è quanto voluto.
Prove fatte con delle delta definite costanti mi porterebbero a pensare che succeda proprio questo: ma allora perché nelle altre funzioni, dove invece di sommare si moltiplica, il risultato è quello giusto indipendentemente dall'ordine?
P.S. CODE produce testo diverso a seconda che contenga o meno dei salti a capo.-
Re: Mattia renditi utileScritto daNon Autenticatoil 2020-02-21 20:17:08.0 alle 2020-02-21 20:17:08.0Scritto da:
> Scritto da: Mattia
> > Scritto da:
> > > Come mai il risultato di queste due funzioni Javascript è diverso?
> > >
> > >function a(n, k, x) { > > > z = 0; > > > for (j = 2; j <= n; j++) { > > > z = z + delta(n, j*k, x); > > > } > > > return (0 + z); > > > } > > > > > > function a(n, k, x) { > > > z = 0; > > > for (j = 2; j <= n; j++) { > > > z = delta(n, j*k, x) + z; > > > } > > > return (0 + z); > > > }
> > > La prima esegue la somma dei valori di delta(n, j*k, x) per j da 2 a n, la seconda no.
> > > Funzioni simili dove invece della somma si fa un prodotto non mostrano differenze cambiando l'ordine dei fattori.
> >
> > Posta anche la funzione delta.
>
> È un po' complesso, spero non manchi niente.
>
> Per il quadro completo bisogna andare su
>
> http://www1.chapman.edu/~jipsen/svg/asciisvgeditor...
>
> scaricare la pagina con tutti gli annessi, aggiungerci nell'HEAD la riga
>
> <script type="text/javascript" src="myfunctions.js"></script>
>
> Avevo poi aggiunto istruzioni, suggerite dalla suora, per mostrare il sorgente del SVG prodotto in una TEXTAREA.
>
> Lo script myfunctions.js definisce alcune funzioni
>
>function fatt(n) { > var i,f > f=1 > for(i = n; i > 1; i--) { > f=f*i > } > return(f) > } > > > function delta2(n, j, x) { > y = 1; > z = 1; > for (i = 1; i < j; i++) { > y = (x - i)*y; > } > for (i = j + 1; i <= n; i++) { > z = (x - i)*z; > } > z = z*y > z = z * (-1)**(n - j) / ( fatt(j - 1) * fatt(n - j) ) > return z; > } > > function delta4(n, j, x) { > y = 1; > z = 1; > for (i = 1; i < j; i++) { > y = y*(x - i); > } > for (i = j + 1; i <= n; i++) { > z = z*(x - i); > } > z = z*y > z = z * (-1)**(n - j) / ( fatt(j - 1) * fatt(n - j) ) > return z; > } > > function delta(n, j, x) { > return delta2(n, j, x); > } > > function a(n, k, x) { > z = 0; > for (j = 2; j <= n; j++) { > z = z + delta(n, j*k, x); > } > return (0 + z); > }
> La funzione delta si può definire al volo delta come delta2 o delta4 per vedere se cambia qualcosa. Differiscono per l'ordine dei fattori nel ciclo ma il risultato non cambia.
>
> Nella funzione a invece stranamente l'ordine degli addendi conta.
>
> L'istruzione return(0 + z) è perché poi dovrò aggiungere a z un valore costante, momentaneamente azzerato per il debugging.
>
> Nel riquadro della pagina con le istruzioni si mette
>
>setBorder(1) > initPicture(-1,12, -2, 2) > axes(1, 1, "labels", 1, 1) > > stroke = "blue" > plot("delta(10, 4, x)") > > plot("a(10, 5, x)")
> dove plot è una funzione definita dall'autore della pagina, che suppongo priva di bachi perché con questa pagina ho disegnato funzioni su funzioni quando creavo le figure per la tesi di laurea, senza mai notare anomalie.
>
> Puoi cambiare i parametri nelle funzioni delta ed a per vedere come cambia il grafico. Per la delta ne ho esaminate parecchie, per la a devo ancora farlo perché avevo il problema che non dava i risultati attesi, risolto cambiando l'ordine degli addendi.
>
> Potrei pensare che
>
> z = delta(n, j*k, x) + z
>
> calcoli delta, assegni tale valore a z e poi ci sommi z, che avendo assunto tale valore risulta in due volte delta, e che invece
>
> z = z + delta(n, j*k, x)
>
> assegni a z il valore del ciclo precedente e poi vi somma delta, che è quanto voluto.
>
> Prove fatte con delle delta definite costanti mi porterebbero a pensare che succeda proprio questo: ma allora perché nelle altre funzioni, dove invece di sommare si moltiplica, il risultato è quello giusto indipendentemente dall'ordine?
>
> P.S. CODE produce testo diverso a seconda che contenga o meno dei salti a capo.
R. Credo che l'ANOmalia sia dovuta all'uso della stessa variabile z come accumulatore in una funzione e in un'altra funzione da essa chiamata. Non perché ne abbia seguito passo per passo le conseguenze, ma perché chiamando le variabili in modo diverso la funzione si comporta come dovrebbe indipendentemente dall'ordine degli addendi.
Credevo che ogni variabile interna a una funzione avesse uno scope distinto da variabili omonime in altre funzioni o al di fuori di quella funzione, a quanto pare non è così. Però ciò complica la vita allo scrivere funzioni in Javascript da riutilizzare, perché nel farlo dovresti andare a vedere come sono fatte e non ti puoi fidare.-
Re: Mattia renditi utileScritto da:
> Scritto da:
> > Scritto da: Mattia
> > > Scritto da:
> > > > Come mai il risultato di queste due funzioni Javascript è diverso?
> > > >
> > > >function a(n, k, x) { > > > > z = 0; > > > > for (j = 2; j <= n; j++) { > > > > z = z + delta(n, j*k, x); > > > > } > > > > return (0 + z); > > > > } > > > > > > > > function a(n, k, x) { > > > > z = 0; > > > > for (j = 2; j <= n; j++) { > > > > z = delta(n, j*k, x) + z; > > > > } > > > > return (0 + z); > > > > }
> > > > La prima esegue la somma dei valori di delta(n, j*k, x) per j da 2 a n, la seconda no.
> > > > Funzioni simili dove invece della somma si fa un prodotto non mostrano differenze cambiando l'ordine dei fattori.
> > >
> > > Posta anche la funzione delta.
> >
> > È un po' complesso, spero non manchi niente.
> >
> > Per il quadro completo bisogna andare su
> >
> > http://www1.chapman.edu/~jipsen/svg/asciisvgeditor...
> >
> > scaricare la pagina con tutti gli annessi, aggiungerci nell'HEAD la riga
> >
> > <script type="text/javascript" src="myfunctions.js"></script>
> >
> > Avevo poi aggiunto istruzioni, suggerite dalla suora, per mostrare il sorgente del SVG prodotto in una TEXTAREA.
> >
> > Lo script myfunctions.js definisce alcune funzioni
> >
> >function fatt(n) { > > var i,f > > f=1 > > for(i = n; i > 1; i--) { > > f=f*i > > } > > return(f) > > } > > > > > > function delta2(n, j, x) { > > y = 1; > > z = 1; > > for (i = 1; i < j; i++) { > > y = (x - i)*y; > > } > > for (i = j + 1; i <= n; i++) { > > z = (x - i)*z; > > } > > z = z*y > > z = z * (-1)**(n - j) / ( fatt(j - 1) * fatt(n - j) ) > > return z; > > } > > > > function delta4(n, j, x) { > > y = 1; > > z = 1; > > for (i = 1; i < j; i++) { > > y = y*(x - i); > > } > > for (i = j + 1; i <= n; i++) { > > z = z*(x - i); > > } > > z = z*y > > z = z * (-1)**(n - j) / ( fatt(j - 1) * fatt(n - j) ) > > return z; > > } > > > > function delta(n, j, x) { > > return delta2(n, j, x); > > } > > > > function a(n, k, x) { > > z = 0; > > for (j = 2; j <= n; j++) { > > z = z + delta(n, j*k, x); > > } > > return (0 + z); > > }
> > La funzione delta si può definire al volo delta come delta2 o delta4 per vedere se cambia qualcosa. Differiscono per l'ordine dei fattori nel ciclo ma il risultato non cambia.
> >
> > Nella funzione a invece stranamente l'ordine degli addendi conta.
> >
> > L'istruzione return(0 + z) è perché poi dovrò aggiungere a z un valore costante, momentaneamente azzerato per il debugging.
> >
> > Nel riquadro della pagina con le istruzioni si mette
> >
> >setBorder(1) > > initPicture(-1,12, -2, 2) > > axes(1, 1, "labels", 1, 1) > > > > stroke = "blue" > > plot("delta(10, 4, x)") > > > > plot("a(10, 5, x)")
> > dove plot è una funzione definita dall'autore della pagina, che suppongo priva di bachi perché con questa pagina ho disegnato funzioni su funzioni quando creavo le figure per la tesi di laurea, senza mai notare anomalie.
> >
> > Puoi cambiare i parametri nelle funzioni delta ed a per vedere come cambia il grafico. Per la delta ne ho esaminate parecchie, per la a devo ancora farlo perché avevo il problema che non dava i risultati attesi, risolto cambiando l'ordine degli addendi.
> >
> > Potrei pensare che
> >
> > z = delta(n, j*k, x) + z
> >
> > calcoli delta, assegni tale valore a z e poi ci sommi z, che avendo assunto tale valore risulta in due volte delta, e che invece
> >
> > z = z + delta(n, j*k, x)
> >
> > assegni a z il valore del ciclo precedente e poi vi somma delta, che è quanto voluto.
> >
> > Prove fatte con delle delta definite costanti mi porterebbero a pensare che succeda proprio questo: ma allora perché nelle altre funzioni, dove invece di sommare si moltiplica, il risultato è quello giusto indipendentemente dall'ordine?
> >
> > P.S. CODE produce testo diverso a seconda che contenga o meno dei salti a capo.
>
> R. Credo che l'ANOmalia sia dovuta all'uso della stessa variabile z come accumulatore in una funzione e in un'altra funzione da essa chiamata. Non perché ne abbia seguito passo per passo le conseguenze, ma perché chiamando le variabili in modo diverso la funzione si comporta come dovrebbe indipendentemente dall'ordine degli addendi.
>
> Credevo che ogni variabile interna a una funzione avesse uno scope distinto da variabili omonime in altre funzioni o al di fuori di quella funzione, a quanto pare non è così. Però ciò complica la vita allo scrivere funzioni in Javascript da riutilizzare, perché nel farlo dovresti andare a vedere come sono fatte e non ti puoi fidare.
Errato: in javascript le funzioni sono il solo modo possibile per creare uno scope separato, tant'è che siccome in javascript non ci sono i namespace per ottenerli si usano le funzioni.var myNamespace = new function() { var internalFunction = function() { }; this.publicFunction = function() { }; };
Quello a cui devi stare attento se mai è il contrario: qualsiasi cosa venga dichiarata al di fuori di una funzione, finisce nella memoria globale.
Facciamo degli esempi...function func1(){ var a=1; } function func2(){ console.log(a); }
Quando chiami la funzione func2 ti dirà errore: ti dirà che la variabile "a" non è mai stata dichiarata, perché infatti viene dichiarata nella funzione func1 che ha un suo scope separato.var a=1; function func1(){ a=3; } function func2(){ console.log(a); } func2(); //stampa 1 func1(); //cambia valore alla variabile globale a func2(); //stampa 3
In questo caso invece a è una veriabile globale ed è accessibile a tutte le funzioni.var a=1; function func1(){ var a=3; //dichiarazione di una variabile locale che nasconde quella globale console.log(a); func3(); function func3(){ console.log(a); } } function func2(){ console.log(a); } func2(); //stampa 1 func1(); //stampa 3 per due volte func2(); //stampa 1
In quest'ultimo caso all'interno della funzione func1 viene dichiarata una variabile locale omonima di quella globale: all'interno della funzione la variabile globale viene nascosta in favore di quella locale, mentre in tutto il resto del codice (al di fuori della funzione func1) "a" è la variabile globale.
Anche la funzione func3, trovandosi all'interno della funzione func1, accede alla variabile locale, che nasconde quella globale. Essa, a sua volta, potrebbe nascondere la variabile locale di func1 dichiarando a sua volta una nuova variabile "a".
Vediamo poi un'ultima curiosità.for(var k=0;k<20;k++){ } if(true){ var a=4; } console.log(k); console.log(a);
Se non lo sapevi, sallo: mentre in altri linguaggi ogni blocco di codice ha uno scope separato, in javascript ciò che viene dichiarato dentro un blocco (ciclo, if, ecc ecc...) finisce nella memoria globale.
Quindi, per evitare di fare confusione, è meglio dichiarare tutte le variabili fuori dai blocchi per poi usarle dentro i blocchi.
L'unico modo per creare uno scope separato in javascript è attraverso le funzioni.-
Re: Mattia renditi utileScritto daNon Autenticatoil 2020-02-22 00:02:59.0 alle 2020-02-22 00:02:59.0code]var a=1;
function func1(){
a=3;
}
function func2(){
var a=3; //dichiarazione di una variabile locale che nasconde quella globale
}[/code]
Eccolo qui l'errore: nelle mie funzioni non ho messo var z = perché pensavo, probabilmente da PHP, che var a = 3 e a = 3 in func1 facessero la stessa cosa.function func1(){ a=3; } function func2(){ a=4; }
Così func1 crea una variabile locale a e func2 lo stesso. Se chiamo func1 e func2 una dopo l'altra, a funziona indipendentemente in ciascuna di esee. Ma se func2 chiama func1,function func1(){ a=3; } function func2(){ a=4; func1(); }
quello che fa func1 dentro func2 direi che sia cambiare in 3 il valore della variabile a definita da func2, e non definire una propria variabile interna indipendente fa quella di func2.
Giusto?
> Vediamo poi un'ultima curiosità.
>
>for(var k=0;k<20;k++){ > } > > if(true){ > var a=4; > } > > console.log(k); > console.log(a);
>
> Se non lo sapevi, sallo: mentre in altri linguaggi ogni blocco di codice ha uno scope separato, in javascript ciò che viene dichiarato dentro un blocco (ciclo, if, ecc ecc...) finisce nella memoria globale.
> Quindi, per evitare di fare confusione, è meglio dichiarare tutte le variabili fuori dai blocchi per poi usarle dentro i blocchi.
>
> L'unico modo per creare uno scope separato in javascript è attraverso le funzioni.
Questo più o meno lo sapevo: alla fine del ciclo k rimane a 19.-
Re: Mattia renditi utileScritto da:
>function func1(){ > a=3; > } > > function func2(){ > a=4; > }
> Così func1 crea una variabile locale a e func2 lo stesso.
No, in realtà quello che fanno le due funzioni è cercare di assegnare un valore a una variabile "a" che già esiste.
Visto che la variabile "a" non viene dichiarata in nessuna delle due funzioni, si può dare per scontato che la variabile "a" sia una variabile globale dichiarata da qualche parte nel codice al di fuori di qualsiasi funzione.
L'altra possibilità è che il programmatore si stia sbagliando, perché la variabile "a" non esiste: se si assume che quello che hai messo sopra è l'intero codice del tuo programma, allora questa seconda opzione è quella corretta.
La variabile "a" non viene MAI dichiarata, quindi è un errore.
Se javascript fosse un linguaggio di programmazione serio, quel programma non partirebbe nemmeno: ti darebbe un errore di interpretazione/compilazione, costringendoti a correggere l'errore.
Siccome però javascript è un linguaggio di merda (come diceva anche Wakko per le stesse ragioni) invece ti perdona l'errore e dietro le quinte te lo corregge.
Questo codice...func1(); func2();
...verrà così trasformato dietro le quinte.var a; func1(); func2();
"a" è una variabile globale.
Non è bello il fatto che l'interprete ti corregga gli errori?
No, perché:
- Così facendo non impari a scrivere correttamente il codice
- Il codice che viene eseguito nel programma non è quello che hai tu sotto gli occhi
- A volte ti ritrovi a correre dietro a un bug derivante da un errore di scrittura, che si poteva semplicemente evitare se l'interprete ti avesse segnalato l'errore prima dell'esecuzione anziché voler eseguire il programma a tutti i costi
Ora, immagina di metterti a lavorare su un programma di migliaia di righe di codice...
... se tu scrivi il codice che hai messo sopra e nel programma esistesse già una variabile globale "a" le due funzioni che hai messo non farebbero altre che assegnare un nuovo valore a quella variabile, per cui la tua idea che stai creando una nuova variabile locale in ciascuna delle due funzione sarebbe del tutto errata.
Se poi quella variabile globale fosse di importanza cruciale, il tuo codice andrebbe a creare un errore critico nel software.
Quindi il codice corretto è questo qui.function func1(){ var a=3; //dichiarazione di una variabile locale "a" che nasconde eventuali variabili globali con lo stesso nome } function func2(){ var a=4; //dichiarazione di una variabile locale "a" che nasconde eventuali variabili globali con lo stesso nome }
Javascript da questo punto di vista non funziona come PHP, ma come il C.
Cint a; //dichiarazione della variabile a=2; //assegnazione di un valore alla variabile
Javascriptvar a; //dichiarazione della variabile a=2; //assegnazione di un valore alla variabile
Anche in Javascript, come in C, una variabile deve essere prima di tutto dichiarata in maniera esplicita. La differenza è che siccome il C è un linguaggio tipizzato, la dichiarazione ha anche lo scopo di stabilire il tipo della variabile, mentre in javascript no: per questo si usa il generico "var" anziché int/double/float ecc ecc...
> Se chiamo func1 e func2 una dopo l'altra, a funziona indipendentemente in ciascuna di esee. Ma se func2 chiama func1,
>
>function func1(){ > a=3; > } > > function func2(){ > a=4; > func1(); > }
> quello che fa func1 dentro func2 direi che sia cambiare in 3 il valore della variabile a definita da func2, e non definire una propria variabile interna indipendente fa quella di func2.
Lascia perdere tutto sto codice.
Basta questo.function func1(){ a=3; }
Quando chiami la funzione, l'intrprete si accorgerà che c'è l'errore spiegato sopra, cioè che la variabile "a" non è mai stata dichiarata.
Quindi se tu scrivi questo codice...func1();
... lui dietro le quinte lo trasforma invar a; func1();
"a" è una variabile globale.
Se tu però scrivessi il codice in maniera corretta, l'intrprete non avrebbe bisogno di essere creativo.
Il codice corretto per l'esempio da te fatto.function func1(){ var a=3; } function func2(){ var a=4; func1(); console.log(a); } func2(); //stampa 4 console.log(a); //Dà errore: la variabile "a" qui non esiste
Come puoi constatare, con una scrittura del codice corretta tutto funziona alla perfezione: la variabile in ciascuna delle due funzioni è e sempre resterà una variabile locale diversa e nessuna funzione potrà interferire con la variabile dell'altra.
Ecco invece come è stato interpretato il tuo codice a causa dell'errore della mancata dichiarazione delle variabili.function func1(){ a=3; } function func2(){ a=4; func1(); console.log(a); } var a; func2(); //stampa 3 console.log(a); //stampa 3: la variabile è accessibile anche da qui essendo globale
Alla chiamata della funzione func2, l'interprete, accorgendosi dell'errore della mancata dichiarazione della variabile a, la dichiara nella memoria globale prima di chiamare la funzione func2. Quindi tutto il tuo codice sarà semplicemente un'assegnazione di valori a questa variabile globale.
Adesso sai perché io e Wakko consideriamo javascript un linguaggio di merda: la sua scarsa severità, nonché il suo prendere personale iniziativa nella correzione di errori formali, porta a bug che sarebbero evitabili.
Certo, anche leggere un libro prima di mettersi a usare un linguaggio comunque previene errori evitabili: mica si può andare a naso con i linguaggi di programmazione, supponendo arbitrariamente che javascript funzioni come PHP.
**Modificato dall'autore il 22.02.2020 17:43**-
Re: Mattia renditi utileScritto daNon Autenticatoil 2020-02-24 22:33:22.0 alle 2020-02-24 22:33:22.0In sintesi,
var a dichiara una variabile,
a = 5 le assegna un valore.
var a = 5 dichiara la variabile e le assegna un valore.
Ma se scrivo solo a = 5 per una variabile non dichiarata, JS implicitamente la dichiara.
Per questa ragione ero stato indotto a credere che var a = 5 e a = 5 si equivalessero, come se var fosse un residuo di una sintassi passata mantenuto per retrocompatibilità, perchè non avevo finora incontrato un caso in cui le due situazioni fossero diverse.
Sto cominciando a sospettare che possa eserci una differenza anche tra mettere e non mettere il punto e virgola
È per questa ragione che non puoi pensare di lavorare come programmatore se non hai una buona formazione teorica.
-
-
-
-
-
-
-