2010-03-30 18 views

risposta

10

window.a è una proprietà di window ed è undefined. a è una variabile ed è non dichiarata.

Per utilizzare una variabile, è necessario prima dichiararla utilizzando l'istruzione var. Poiché non hai dichiarato a, l'interprete genera un errore. Le proprietà dell'oggetto non sono necessarie per essere esplicitamente dichiarate per poterle utilizzare. Crockford scrive in le parti buone:

If you attempt to extract a value from an object, and if the object does not have a member with that name, it returns the undefined value instead.

+1

Tuttavia: "window.a = 2; a" - Non è necessario alcun 'var'. Succede solo che l'eccezione è generata quando una ricerca di identificatori "non prefissati" finisce fuori dagli ambiti concatenati per cercare dentro. L'ultimo contesto controllato è il contesto globale (o "finestra"). Per la maggior parte degli scopi pratici, 'var x' nel contesto globale è uguale a 'window.x = undefined'. Vedi http://jibbering.com/faq/faq_notes/closures.html e guarda "Risoluzione dell'identificatore, contesti di esecuzione e catene dell'oscilloscopio". –

+0

@pst: questo è un caso speciale nei browser che tutte le variabili globali sono proprietà di 'window'. È un problema indipendente di JavaScript. Se esegui 'window.a = 2; a' in Rhino, che è un ambiente non browser, si ottiene comunque l'errore di riferimento. –

+0

@pst: comunque, grazie per il vostro supplemento nel chiarire la risposta. –

Problemi correlati