v'è tale codice javascript:Javascript funzione
function a() {
a = 3;
return a;
}
console.log(a());
console.log(a());
Dopo l'esecuzione esso stampa: 3, errore di tipo. Qualcuno potrebbe spiegare il motivo per cui, si prega di
v'è tale codice javascript:Javascript funzione
function a() {
a = 3;
return a;
}
console.log(a());
console.log(a());
Dopo l'esecuzione esso stampa: 3, errore di tipo. Qualcuno potrebbe spiegare il motivo per cui, si prega di
Hai un problema di portata
Perché non è stato utilizzato "var" si sta sovrascrivendo il globale "di una" variabile (usato per essere la funzione) con un numero 3).
Quando si tenta di eseguirlo una seconda volta, non è più una funzione ma un numero, che genera l'errore di tipo.
function a() {
a = 3; // you just over-wrote a()
return a;
}
console.log(a()); // 3, but now "a" === number, not function
console.log(a()); // ERROR, you treated "a" as a function, but it's a number
ciò che si vuole
function a() {
var a = 3; // using var makes "a" local, and does not override your global a()
return a;
}
console.log(a()); // 3
console.log(a()); // 3
Utilizzando var è raccomandato quasi sempre all'interno di una funzione, altrimenti sei inquinanti, o peggio di primaria importanza, le variabili globali. In JS, var applica la variabile all'ambito locale (la funzione).
noti che usare var nell'ambito globale crea ancora una variabile globale
Se si stava tentando di impostare a
come variabile, allora var
è necessaria di fronte. Poiché non lo hai fatto, è esposto all'ambito globale, nel quale fa parte dell'oggetto window
e puoi accedervi con window.a
. Quindi, la cosa migliore da fare è cambiare la prima riga del corpo della funzione per dire: var a = 3
.
grazie ragazzi per la tua spiegazione è stata una domanda di prova in un esempio online di domande poste in una società –
Consiglio assolutamente [questo libro] (https://github.com/getify/You-Dont-Know-JS/tree/master/scope%20%26%20closures) dalla serie You Do not Know Js –
Buon collegamento! @ LionelDamiánT ha ragione. Ho parlato di "scope" senza menzionarlo. La questione fondamentale in OP è legata all'ambito. Fallo un po 'più chiaro in risposta. –