- •1. Основные понятия
- •3.4.2. Окно с сообщением и кнопками ok и Cancel
- •3.4.3. Окно с полем ввода и кнопками ok и Cancel
- •3.6. Типы данных и инициализация переменных. Определение типа данных переменной
- •3.7. Операторы JavaScript
- •3.7.1. Математические операторы
- •3.7.2. Операторы присваивания
- •3.7.3. Двоичные операторы
- •3.7.4. Оператор обработки строк
- •3.8. Преобразование типов данных
- •3.9. Специальные символы. Разбиение сообщения в диалоговом окне на несколько строк
- •3.10. Массивы
- •3.11. Функции. Разделение программы на фрагменты
- •3.11.1. Основные понятия
- •3.11.2. Расположение функций внутри html-документа
- •3.11.3. Рекурсия. Вычисление факториала
- •3.11.4. Глобальные и локальные переменные
- •3.12. Условные операторы. Выполнение блоков кода только при соответствии условию
- •3.12.1. Операторы сравнения
- •3.12.2. Оператор ветвления if...Else. Проверка ввода пользователя
- •3.12.3. Оператор ? Проверка числа на четность
- •3.12.4. Оператор выбора switch
- •3.13. Операторы циклов. Многократное выполнение блока кода
- •3.13.1. Цикл for
- •3.13.2. Цикл while
- •3.13.3. Цикл do...While
- •3.13.4. Оператор continue.
- •3.13.5. Оператор break. Прерывание цикла
- •3.14. Ошибки в программе
- •3.14.1. Синтаксические ошибки
- •3.14.2. Логические ошибки
- •3.14.3. Ошибки времени выполнения
- •3.15. Встроенные классы JavaScript
- •3.15.1. Основные понятия
- •3.15.2. Класс Global
- •3.15.3. Класс Number. Работа с числами
- •3.15.4. Класс String. Обработка строк
- •3.15.5. Класс Array. Работа с массивами и их сортировка
- •Многомерные массивы
- •Ассоциативные массивы. Перебор ассоциативных массивов
- •3.15.6. Класс Math. Использование математических функций
- •3.15.7. Класс Date. Получение текущей даты и времени. Вывод даты и времени в окне Web-браузера
3.11.2. Расположение функций внутри html-документа
Обычно функции принято располагать в разделе head HTML-документа (листинг 3.12) или в отдельном файле с расширением js (листинги 3.13 и 3.14). Хотя функции могут располагаться и в разделе body.
Листинг 3.12. Функция расположена в разделе HEAD
<HTML>
<HEAD>
<TITLE>Функции</TITLE>
<SCRIPT language="JavaScript">
<!--
function f_Sum (m_x, m_y) {
return (m_x + m_y);
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
var m_Var, m_Var1=5, m_Var2=3;
m_Var = f_Sum (m_Var1, m_Var2);
document.write(m_Var);
//-->
</SCRIPT>
</BODY>
</HTML>
Листинг 3.13. Функция вынесена в отдельный файл script.js
<HTML>
<HEAD>
<TITLE>Функции</TITLE>
<SCRIPT language="JavaScript" src="script.js">
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
var m_Var, m_Var1=5, m_Var2=3;
m_Var = f_Sum (m_Var1, m_Var2);
document.write(m_Var);
//-->
</SCRIPT>
</BODY>
</HTML>
Листинг 3.14. Содержимое файла script.js
function f_Sum (m_x, m_y) {
return (m_x + m_y);
}
Создать файл script.js можно с помощю Блокнота.
3.11.3. Рекурсия. Вычисление факториала
Рекурсия — это возможность функции вызывать саму себя. С одной стороны, это удобно, с другой стороны, если не предусмотреть условие выхода, происходит зацикливание. Для примера приведем вычисление факториала.
Листинг 3.15. Вычисление факториала
<HTML>
<HEAD>
<TITLE>Вычисление факториала</TITLE>
<SCRIPT language="JavaScript">
<!--
function f_Factorial (m_x) {
if (m_x == 0 || m_x == 1) return 1;
else return (m_x * f_Factorial (m_x - 1));
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
var m_Str1;
m_Str1=window.prompt("Вычисление факториала\nВведите число", "");
if (m_Str1==null) {
document.write("Вы нажали Отмена");
}
else {
document.write("Факториал числа " + m_Str1 + " = ");
document.write(f_Factorial (parseInt(m_Str1)));
}
//-->
</SCRIPT>
</BODY>
</HTML>
3.11.4. Глобальные и локальные переменные
Глобальные переменные — это переменные, объявленные вне функции. Глобальные переменные видны в любой части программы, включая функции.
Локальные переменные — это переменные, объявленные внутри функции. Локальные переменные видны только внутри тела функции. Если имя локальной переменной совпадает с именем глобальной переменной, то все операции внутри функции осуществляются с локальной переменной, а значение глобальной не изменяется.
Механизм, регулирующий такое поведение, называется областью видимости переменных. Он продемонстрирован в листинге 3.16.
Листинг 3.16. Глобальные и локальные переменные
<HTML>
<HEAD>
<TITLE>Глобальные и локальные переменные</TITLE>
<SCRIPT language="JavaScript">
<!--
function f_Sum () {
var m_Var1=5;
var m_Numer=1;
document.write("Локальная переменная m_Var1 = " + m_Var1 + "<BR>");
document.write("Локальная переменная m_Numer = " + m_Numer + "<BR>");
document.write("Глобальная переменная m_Var2 = " + m_Var2 + "<BR>");
return m_Var1+m_Var2;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript">
<!--
var m_Var1, m_Var2, m_Var3;
m_Var1=10;
document.write("Глобальная переменная m_Var1 = " + m_Var1 + "<BR>");
m_Var2=7;
m_Var3=f_Sum ();
document.write("Сумма m_Var1 + m_Var2 = " + m_Var3 + "<BR>");
document.write("Глобальная переменная m_Var1 осталась = ");
document.write(m_Var1 + "<BR>");
document.write("Локальная переменная m_Numer = " + typeof(m_Numer));
document.write(" , т.е. не видна вне тела функции");
//-->
</SCRIPT>
</BODY>
</HTML>
В окне Web-браузера получим следующий результат:
Гло.переменная m_Var1 = 10
Лок. переменная m_Varl = 5
Л. переменная m_Numer = 1
Г. переменная m_Var2 = 7
Сумма m_Var1 + m_Var2 = 12
Г-я переменная m_Var1 осталась = 10
Лок. переменная m_Numer = undefined , т. е. не видна вне тела функции
Как видно из листинга 3.16, переменная m Numer, объявленная внутри функции f_sum(), не доступна вне функции. Глобальную переменную m_Varl не затронуло объявление внутри функции одноименной локальной переменной и её изменение. А глобальная переменная m_Var2 видна внутри функции m_Sum().