Question

ECMA-262 paragraphes 5.1 10.4.2 et 10.4.2.1 se référer à un "appel le contexte." Ce ne semble pas être décrits ailleurs dans le document.

Citant le spec, c'est moi qui souligne:

10.4.2 Entrer Eval Code

Les étapes suivantes sont effectuées lorsque le contrôle pénètre dans le contexte d'exécution de la fonction eval code:

  1. Si il n'y a pas de l'appel de contexte ou si l'eval code n'est pas en cours d'évaluation par un appel direct (15.1.2.1.1) à la fonction eval puis,

10.4.2.1 Strictes Restrictions Du Mode D'

L'eval de code ne peut pas instancier la variable ou de la fonction des liaisons dans la variable d'environnement de la l'appel de contexte qui a appelé le eval si le code de la l'appel de contexte ou l'eval code est un code strict.Au lieu de cela ces liaisons sont instanciés dans un nouveau VariableEnvironment qui n'est accessible que pour les eval code.

  • Ce n' "appel le contexte" dans ces paragraphes?Je suppose qu'il fait référence à la Contexte D'Exécution en haut de la pile juste avant eval est appelé;quelqu'un peut-il vérifier?

  • Que signifie le fait de n'avoir "pas d'appel dans le contexte?" Quelqu'un peut-il fournir un exemple de code ou les conditions qui pourraient entraîner un appel à eval sans appel le contexte?

Était-ce utile?

La solution

L ' "appel le contexte" fait référence au contexte qui le natif eval la fonction est appelée à partir d'.

Si vous sont en cours d'exécution eval à partir du code natif (par exemple, vous exécutez une fonction native qui exécute le code une fois rempli à l'aide de eval pour une raison ou une autre), alors il n'aurait pas de contexte, qui est alors précisé à exécuter en vertu de la portée globale.Le contexte se réfère uniquement à la ECMAScript code exécutable.

Cependant, le contexte de l'appel se réfère aux variables et les directives dans le contexte d'exécution de l'endroit où il est appelé.Par exemple, on sait seulement que la fonction eval est destinée à travailler en tant que code de conduite très strict si elle vérifie le contexte de l'appel.

Cette disposition est précisée par une question très semblable dans l'ES-Discuter de la liste de diffusion, où Brendan Eich (le créateur de JavaScript) répond:

Comment peut-eval code ont pas une vocation contexte?

ES3 dit:

10.2.2 Eval Code

Lorsque le contrôle pénètre dans un contexte d'exécution pour eval code, l'actif précédent le contexte d'exécution, appelé le l'appel de contexte, est utilisé pour déterminer l'étendue de la chaîne, la variable l'objet et la valeur de this.Si il n'y a pas d'appel de contexte, alors initialisation de la chaîne d'étendue variable, l'instanciation, et la détermination de cette valeur sont effectuées tout comme pour le code mondial.

Je suis déçu par "Si il n'y a aucun appel de contexte".Comment pourrait-on le possibilité surviennent?Comment eval me demande si on ne l'appelle?

Réponse:

Un appel à partir du code natif, le "host" du programme.

Certains navigateurs prennent en charge indirecte eval, ce qui lui permet:

setTimeout(eval, 0, "alert('hi mom')");

La fenêtre utilisée est celle dans laquelle setTimeout a été trouvé le long de la la portée de la chaîne, de sorte

myFrame.setTimeout(eval, 0, "alert(x)");

devrait montrer myFrame.x, pas l'appel de la fenêtre de l' x.

Note: myFrame dans cet exemple se rapporte à l'image de portée mondiale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top