Introdução
O JavaScript é um idioma interpretado e sua execução é de cima para baixo. No entanto, cada navegador tem pequenas diferenças em seu entendimento de [de cima para baixo], e o upstream e a jusante do código, ou seja, o fluxo do programa, é crucial para a operação correta do programa. Portanto, é necessário entender a ordem de execução do JS em profundidade. Para esse fim, projetei os oito experimentos a seguir para obter os resultados mais precisos.
experimentar
A cópia do código é a seguinte:
<script type = "text/javascript">
// Experiência 1:
função t (a)
{
alerta ("[t (a)] a:" + a);
}
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
t (1);
//resultado:
// [t (a, b)] a: 1, b: indefinido
// Experiência 2:
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
função t (a)
{
alerta ("[t (a)] a:" + a);
}
t (1);
//resultado:
// [t (a)] a: 1
// Experiência 3:
função t (a)
{
alerta ("[t (a)] a:" + a);
}
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
t (1, 2);
//resultado:
// [t (a, b)] a: 1, b: 2
// Experiência 4:
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
função t (a)
{
alerta ("[t (a)] a:" + a);
}
t (1, 2);
//resultado:
// [t (a)] a: 1
// Experimento 5
função t (a)
{
alerta ("[t (a)] a:" + a);
}
t (1);
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
//resultado:
// [t (a, b)] a: 1, b: indefinido
// Experimento 6
função t (a)
{
alerta ("[t (a)] a:" + a);
}
t (1, 2);
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
//resultado:
// [t (a, b)] a: 1, b: 2
// Experimento 7
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
t (1);
função t (a)
{
alerta ("[t (a)] a:" + a);
}
//resultado:
// [t (a)] a: 1
// Experimento 8
função t (a, b)
{
alerta ("[t (a, b)] a:" + a + ", b:" + b);
}
t (1, 2);
função t (a)
{
alerta ("[t (a)] a:" + a);
}
//resultado:
// [t (a)] a: 1
</script>
PostScript
Ao definir uma função JavaScript, o nome da função é o identificador do objeto de função e o número de parâmetros é apenas o atributo da função. Não é possível implementar a sobrecarga definindo funções com um número diferente de parâmetros.
Ao chamar uma função, o JS encontra o objeto de função correspondente através do nome da função e, em seguida, corresponde aos parâmetros da definição da função e da lista de parâmetros de expressão em ordem. o código da função é executado.
Portanto, ao definir uma função, os parâmetros necessários são geralmente colocados na frente da lista de parâmetros e os parâmetros opcionais são colocados após os parâmetros necessários.
Coisas a serem observadas
1. Os resultados dos oito experimentos acima foram obtidos com o 360 navegador (versão/kernel: 6.3.1.142/21.0.1180.89) e navegador do Firefox (versão: 27.0.1).
2. Os oito experimentos acima são independentes um do outro.