2010-03-30 2 views

Répondre

10

window.a est une propriété de window et c'est undefined. a est une variable, et non déclaré.

Pour utiliser une variable, vous devez d'abord la déclarer à l'aide de l'instruction var. Puisque vous n'avez pas déclaré a, l'interpréteur déclenche une erreur. Les propriétés d'objet n'ont pas besoin d'être explicitement déclarées pour pouvoir les utiliser. Crockford écrit dans The Good Parts:

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

Cependant: "window.a = 2; a" - No 'var' est nécessaire. Il arrive juste que l'exception soit levée quand une recherche d'identifiant "non-préfixée" court à partir des portées chaînées pour regarder dedans. Le dernier contexte vérifié est le contexte global (ou 'fenêtre'). Dans la plupart des cas, 'var x' dans le contexte global est identique à 'window.x = undefined'. Voir http://jibbering.com/faq/faq_notes/closures.html et regardez "Résolution d'identifiant, Contextes d'exécution et Chaînes d'étendue". –

+0

@pst: c'est un cas particulier dans les navigateurs que toutes les variables globales sont la propriété de 'window'. C'est un problème indépendant de JavaScript. Si vous exécutez 'window.a = 2; a' dans Rhino qui est un environnement non-navigateur, vous obtenez toujours l'erreur de référence. –

+0

@pst: de toute façon, merci pour votre supplément dans la clarification de la réponse. –