2016-01-30 23 views
6

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

risposta

12

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

+2

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 –

+0

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. –

0

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.

+0

grazie ragazzi per la tua spiegazione è stata una domanda di prova in un esempio online di domande poste in una società –