Me he estado preguntando cómo funciona la operación Evaluate en ecmascript.
así que he estado aprendiendo sobre la gramática libre de contexto, pero no pude entender los pasos exactos cuando evaluamos un símbolo no terminal en la especificación.
echa un vistazo al siguiente código
var myVar = 10 supongamos que solo se puede escribir una Statement allí.
Entonces, mi pregunta aquí es ¿cuáles son los pasos exactos cuando Evaluate Statement en este escenario?
cuando evaluamos la declaración, ¿irá directamente a la semántica de tiempo de ejecución de producción VariableDeclaration → BindingPattern Initializer ?
o irá primero a la semántica de tiempo de ejecución de esta producción de la cadena Statement → VariableStatement .
y la semántica de tiempo de ejecución implícita para Statement → VariableStatement es Return the result of evaluating VariableStatement
así que ahora, cuando evaluate VariableStatement , irá a la semántica de tiempo de ejecución de esta producción
VariableStatement → var VariableDeclarationList;
y esta semántica de tiempo de ejecución de producción evaluate VariableDeclarationList
- Sea next el resultado de evaluar VariableDeclarationList.
- ReturnIfAbrupt (siguiente).
- Devuelve NormalCompletion (vacío).
y ahora, cuando evaluamos VariableDeclarationList , irá a la semántica de tiempo de ejecución implícita de esta cadena de producción VariableDeclarationList → VariableDeclaration , por lo que básicamente hará esto Return the result of evaluating VariableDeclaration
y finalmente evaluating VariableDeclaration nos traerá en este escenario a esta producción
VariableDeclaration → BindingIdentifier Initializer Semántica de tiempo de ejecución del inicializador
entonces, nuevamente, mi pregunta es cuando evaluamos la Statement , ¿irá directamente a la semántica de tiempo de ejecución de VariableDeclaration → BindingIdentifier Initializer o seguirá los pasos que acabo de mostrar?