2011-12-16 37 views

risposta

4

Il codice è fuorviante e in uno stile che fa pensare che l'ordine di esecuzione sia importante. Il motore JavaScript standard in questi giorni prenderà questo e riformattare prima di eseguirlo a:

var a = 1, 
b = function() { 
    var a = function() {}; 
    a = 10; 
    return; 
}; 
b(); 
alert(a); 

Ora si può capire che cosa sta realmente accadendo. "a" viene nuovamente dichiarato all'interno della funzione "b", quindi ora ci sono due variabili "a". Uno è "window.a" e l'altro è "b var a" ma NON "b.a" perché non accessibile al di fuori della chiusura o della funzione.

In altre parole, si ottiene ciò per cui si codifica.

Si prega di rendere leggibile il codice e di non confondere il punto.

+0

Grazie, potrei capire con questo codice riformattato. –

+0

Quindi, suppongo che il punto principale di ciò sia che dovresti scrivere il tuo codice come se fosse già stato analizzato per primo. Porterà a una maggiore leggibilità. Douglas Crockford è colui da cui imparare. –

+0

@ emeraldcode.com Personalmente sono d'accordo, ma ci sono persone a cui piace abbattere il codice in modo da poter vedere e leggere l'essenza della funzione in alto, con tutte le parti secondarie che verranno dopo. Quello stile è ciò che JavaScript (I * think *) sta cercando di facilitare. Personalmente ho imparato a codificare in Pascal nel corso della giornata, e hai dovuto fare le cose esattamente nel modo opposto :-) – Pointy

6

Si dichiara un simbolo "a" nella funzione con la sua ultima riga. Questa è la "a" influenzata dalla dichiarazione di assegnazione.

Le dichiarazioni di dichiarazione delle funzioni vengono issate in cima alla funzione e vengono interpretate per prime. Pertanto, la dichiarazione di assegnazione avviene effettivamente dopo che hai dichiarato una funzione (locale alla funzione "b") denominata "a". Il compito, quindi, interessa che il simbolo, non la "a" globale.

Ricordare che le variabili non sono state digitate, quindi il fatto che si è associato un nome a una funzione non impedisce che venga assegnato un valore numerico in un secondo momento.

+0

Wow. Questo è un ottimo esempio della bella flessibilità di javascript e del problema in cui ti può coinvolgere se non stai attento a come lo scrivi. –

+1

Sì! L'apparente semplicità di JavaScript è ciò che lo rende complicato :-) – Pointy

+0

Siamo spiacenti, a punta, hai fatto la stessa risposta come me. Non ho notato la tua risposta, ma terrò la mia per chiarezza. +1 a voi signore. –

Problemi correlati