Введение
JavaScript-это интерпретированный язык, а его исполнение сверху вниз. Тем не менее, каждый браузер имеет небольшие различия в его понимании [сверху вниз], а выше по течению и ниже кода, то есть по потоку программы, имеет решающее значение для правильной работы программы. Таким образом, необходимо понять порядок выполнения JS. С этой целью я разработал следующие восемь экспериментов, чтобы получить наиболее точные результаты.
эксперимент
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
// Эксперимент 1:
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
t (1);
//результат:
// [t (a, b)] a: 1, b: не определен
// Эксперимент 2:
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
t (1);
//результат:
// [t (a)] a: 1
// Эксперимент 3:
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
T (1, 2);
//результат:
// [t (a, b)] a: 1, b: 2
// Эксперимент 4:
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
T (1, 2);
//результат:
// [t (a)] a: 1
// Эксперимент 5
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
t (1);
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
//результат:
// [t (a, b)] a: 1, b: не определен
// эксперимент 6
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
T (1, 2);
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
//результат:
// [t (a, b)] a: 1, b: 2
// Эксперимент 7
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
t (1);
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
//результат:
// [t (a)] a: 1
// эксперимент 8
функция t (a, b)
{
Alert ("[t (a, b)] a:" + a + ", b:" + b);
}
T (1, 2);
функция t (a)
{
оповещение ("[t (a)] a:" + a);
}
//результат:
// [t (a)] a: 1
</script>
PostScript
При определении функции JavaScript имя функции является идентификатором объекта функции, а количество параметров является только атрибутом функции. Невозможно реализовать перегрузку путем определения функций с различным количеством параметров.
При вызове функции JS находит соответствующий объект функции через имя функции, а затем соответствует параметрам определения функции, а список параметров выражения в порядке. Код функции выполняется.
Следовательно, при определении функции необходимые параметры обычно помещаются в передней части списка параметров, а дополнительные параметры размещаются после необходимых параметров.
Что следует отметить
1. Результаты вышеуказанных экспериментов были получены путем прохождения 360 браузера (версия/ядра: 6.3.1.142/21.0.1180.89) и браузер Firefox (версия: 27.0.1).
2. Вышеуказанные восемь экспериментов не зависят друг от друга.