Accès aux variables dans la portée
En JavaScript, il n'est généralement pas possible d'obtenir toutes les variables dans la portée actuelle. Cependant, dans des scénarios spécifiques, il est possible de récupérer les variables locales définies dans une fonction particulière.
Considérez la fonction suivante :
var f = function () { var x = 0; console.log(x); };
Pour extraire les variables locales de cette fonction, vous peut le convertir en chaîne :
var s = f + ''; // Output: 'function () {\nvar x = 0;\nconsole.log(x);\n}'
À l'aide d'un outil d'analyse comme Esprima, vous pouvez analyser le code de la fonction et identifier la variable locale déclarations :
s = s.slice(12); // Remove 'function () ' var result = esprima.parse(s); // Filter for VariableDeclaration objects var variables = result.body.filter(function (obj) { return obj.type === 'VariableDeclaration'; });
Cela fournira un tableau d'objets contenant les noms de variables déclarés et leurs valeurs. Cependant, cette méthode se limite à extraire des variables locales définies au sein de la fonction elle-même.
Dans les situations où des fonctions imbriquées existent, l'accès aux variables locales de la fonction parent n'est pas directement possible. Cependant, vous pouvez utiliser la propriété caller (par exemple, arguments.callee.caller.caller.caller) pour parcourir la pile d'appels et rassembler progressivement les noms de variables.
Bien que cette technique permette d'accéder à des étendues au-delà de l'actuelle fonction, il est essentiel de reconnaître ses limites. La possibilité de récupérer des variables au-delà des limites de la portée n'est pas inhérente à JavaScript et nécessite une stratégie spécifique telle que celle décrite ci-dessus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!