2010-09-30 12 views
13

Chaque variable globale en javascript est une propriété de « fenêtre »Accéder à toutes les variables locales

Apparemment, tous variable locale (aswell comme arguments) sont stockés en tant que propriétés du 'Call object' (voir le chapitre 4.6.2 de chaque fonction. Persumably existant seulement pour la durée de vie de ladite fonction.

Fondamentalement, je veux être en mesure de faire

for (var obj in CallObject) { // } 

Puis-je accéder audit objet contenant des variables locales et si oui, comment? est Sinon il y a une autre façon d'accéder à tous les local va variables d'une fonction.

[Modifier]

Il se trouve que les arguments est une propriété de l'objet d'activation d'une fonction. Cela doit être stocké quelque part.

« L'objet d'activation est purement un mécanisme de spécification . Il est impossible un programme ECMAScript pour accéder à l'objet d'activation. »

Éteint les états ECMAScript auxquels je n'ai pas accès. Qu'en est-il de l'accès aux propriétés des arguments et de l'enchaînement aux variables locales?

+2

Il n'y a pas moyen de le faire en Javascript. De plus, les globals ne sont pas (proprement parlant) toujours des propriétés de "window" - cela dépend de l'endroit où l'interpréteur s'exécute. Dans un programme Javascript côté serveur fonctionnant sous V8 ou Rhino, par exemple, il n'y a pas de "fenêtre" mais il y a un objet "contexte global" qui joue le même rôle (aussi loin que votre question va). – Pointy

Répondre

3

Non. Il n'y a aucun moyen de le faire dans n'importe quelle implémentation de JavaScript dans un navigateur. Il est théoriquement possible qu'une implémentation fournisse une extension pour permettre au code d'inspecter l'objet Variable actuel (alias l'objet Activation dans une fonction; "Call object" est un terme inventé par Flanagan qui n'est mentionné nulle part dans le ECMAScript spec) mais aucune implémentation que je connaisse ne le fait.

1

Vous obtenez un tableau implicite appelé "arguments" dans chaque fonction, mais à côté de cela, il n'y a rien de tel.

+0

oui il y a - 'this'. mais ce n'est pas très utile aussi – mykhal

Questions connexes