
Vamos primeiro falar sobre o que é segmentação de palavras. A segmentação de palavras consiste em decompor uma sequência de caracteres em blocos de código que são significativos para a linguagem de programação. Esses blocos de código são chamados de tokens. Por exemplo, o código var a = 2 será decomposto nas seguintes unidades lexicais. Especificamente: var,a,=,2.
Nota: A segmentação de palavras serve, na verdade, para dividir todo o código acima em segmentos.
Análise consiste em converter o fluxo de unidades lexicais em uma árvore composta de elementos aninhados nível por nível, que representa a estrutura gramatical do programa. Esta árvore é chamada: árvore de sintaxe abstrata. Em vista das palavras padrão excessivamente longas aqui, não as consideraremos; irei exibi-las diretamente de uma forma mais intuitiva. Os detalhes são os seguintes: 
Análise: A árvore de sintaxe abstrata terá um nó de nível superior var, seguido por um nó filho com a variável a e um nó com o operador de atribuição =. Há outro nó filho de 2 sob o símbolo de atribuição. Especificamente, corresponde ao código var a = 2 .
O processo de conversão de uma árvore sintática abstrata em código executável é chamado de geração de código. Este processo está intimamente relacionado ao idioma e à plataforma de destino. Simplificando, existe uma maneira de converter a árvore de sintaxe abstrata de var a = 2 em instruções de máquina. Usado para criar uma variável chamada a e armazenar um valor em a.
dependem principalmente do mecanismo para executar o código JavaScript. Quando o mecanismo executa var a = 2, ele determinará se a variável a foi declarada procurando por ela. O processo de pesquisa é auxiliado por escopos. Durante o processo de consulta, o mecanismo executará LHS (consulta à esquerda) para a variável a e consulta à direita para o valor. Simplificando, quando a variável aparece no lado esquerdo da operação de atribuição, uma consulta LHS é realizada, e quando aparece no lado direito, uma consulta RHS é realizada. Para ser mais preciso, a consulta LHS tenta encontrar o próprio contêiner da variável, enquanto a consulta RHS tenta obter seu valor de origem.
Nota: Na função, haverá consultas LHS e RHS. Porque no processo de passagem de parâmetros, o código realizará atribuição implícita.
Quando a variável não foi declarada, o comportamento da consulta LHS e da consulta RHS é diferente.
função foo(a){
console.log(a+b);
b=a;}foo(2) Nota: A primeira consulta à direita em b não pode encontrar a variável, o que significa que é uma variável não declarada porque não pode ser encontrada em nenhum escopo relevante. Se o RHS não conseguir encontrar as variáveis necessárias no escopo aninhado, o mecanismo lançará uma exceção.
de teste foo(a){
varb=uma;
retornar a+b;
}
problema var c = foo (2)
: encontre todas as consultas LHS e RHS
Resposta: LHS(c=…,a=2,b=…) e RHS(foo(2…,=a,a…,…b))