Программирование циклов с конца
В сл. примере подсчитать сумму элементов массива set можно таким образом (нумерация элементе массива начинается с нуля; set.length – свойство массива – его длина):
var sum = 0;
for(var i=0; i < set.length; i++)
sum += set[i];
А можно и так:
var sum = 0;
for(var i = set.length; -- i >= 0; )
sum += set[i];
Второй способ предпочтительнее.Сравнение с нулем обычно более эффективно, чем сравнение с другим чис-лом.Иными словами «-- i >= 0» работает быстрее, чем «i <set.length». Общее правило: в цикле со счетчиком значение счетчика должно по возможности уменьшаться до нуля.
В сл. примере найдено 10!= 1*2*. . .*10 var proizvedenie = 1; for(var i=10; i; --i) proizvedenie *= i; alert("10!=1 * 2 *...* 10 = "+proizvedenie); Результат этой программы: |
Заметим, что следующий вариант:
var sum = 0;
for(var i = set.length; (i--) >= 0; )
sum += set[i];
является ошибочным,в нем уменьшение i на единицу происходит после проверки условия, а не до, как в правильном варианте.
Описание переменной цикла
В JavaScript можно написать так:
for(var i = 100; i; i--) ...
– или так:
var i;
for(i = 100; i; i--) ...
Для браузера эти записи эквивалентны. Вспомним, что в конструкции цикла:
for(начало; условие; приращение)
команда;
команда начало выполняется один раз перед первым оборотом цикла. Поэтому ясно, что переменная i не определяется 100 раз описателем var.
Рекомендации такие:
–счетчик цикла i можно описывать там же, где описываются другие переменные в начале функции или скрипта;
–счетчик обязательно нужно описывать в общем месте, если он используется в нескольких циклах;
–если в функции цикл единственный, то можно записывать for (var i = …,…; …) — это красиво, и подчеркивает вспомогательный характер переменной i, недостойной более «солидных» описаний.
Если какая-то переменная digit, используется как рабочая внутри цикла и не имеет смысла вне его, то разумнее объявить ее локальной внутри этого цикла, чем объявлять ее в начале функции с комментарием «рабочая переменная цикла такого-то».
Однако, в команде while для JavaScript сл. запись:
while (...)
{ var digit = ...
... }
эквивалентна такой:
var digit;
...
while (...)
{... Digit = ...}
Встроенные функции JavaScript
Все стандартные математические функции и частоиспользуемые константы представлены в качестве методов математического объекта – Math и их свойств.
Объект Math является встроенным объектом JavaScript.
Вы ссылаетесь на константу PI как Math.PI.
Константы определены в JavaScript с точностью до 15-знака после запятой.
Аналогично, вы ссылаетесь на функции Math как на методы. Например, функция синуса - Math.sin(argument), где argument является аргументом функции.
Константы
Основание натурального логарифма - Е. Пример: Alert(Math.E) | |
2. Натуральный логарифм числа 10 – LN10. Пример: Alert(Math.LN10) | |
3. Натуральный логарифм числа 2 – LN2. Пример: Alert(Math.LN2) |
Стандартные функции
1.Aбсолютное значение аргумента – abs(arg) Пример: var x = -25; var y y = Math.abs(x); alert(y); 2.Тригонометрические функции: sin(arg), cos(arg), tan(arg) Пример: var x = Math.PI/4; var y y = Math.sin(x); alert(y); 3.Обратные тригонометрические функции: asin(arg), acos(arg), atan(arg) var x = 0.5; var y y = Math.asin(x); alert(y); 4. Экспонента и натуральный логарифм: exp(arg), log(arg) var x = 1; var y y = Math.exp(x); alert(y); 5. Ближайшее целое число, большее или равное аргументу: ceil(arg) var x = -2.69; var y y = Math.ceil(x); alert(y); 6. Ближайшее целое число, меньшее или равное аргументу: floor(arg) var x = -2.69; var y y = Math.floor(x); alert(y); |
Функции пользователя
В программировании часто бывает нужно повторять несколько раз одну и ту же группу команд. Если повторение происходит «на месте» — используют цикл (while, for). Если код нужно повторять в разных местах программы — его оформляют в виде функции пользователя.
Описание и вызов функции. В самом деле, если уж нужно вычислить длину (количество цифр) целого положительного числа, то логичнее проделать это один раз, а затем спокойно писать, как в математике F(num), не задумываясь над «анатомией» функции f и не повторяя ее кода заново. Пусть, например, пользователь последовательно вводит три числа, а программа вычисляет общее количество цифр.
Пример:
// Количество цифр в целом положительном числе num.
// Вход: num (целое положительное число).
// Выход: количество цифр в num.
function F(num)
{
var len = num ? 0 : 1;
while(num)
{
num = (num - num % 10) / 10;
len ++;
}
return len;
}
var sum = 0;
var num1, num2, num3;
num1 = prompt("Введите первое число", "");
sum += F(numl) ;
num2 = prompt("Введите второе число", "");
sum += F(num2) ;
num3 = prompt("Введите третье число", "");
sum += F(num3) ;
alert("Общее число введенных цифр: " + sum);
Браузер выполняет этот скрипт так. Запись:
function F(num)
{
...
}
принимается во внимание, но команды в ней не выполняются. Браузер делает пометку: «было описание функции с именем F». Так происходит потому, что ключевое слово function и следующий за ним блок {...} являются не командой, а декларацией (описанием).
Команды, следующие за описанием функции, выполняются как обычно. При этом каждый раз, когда в коде попадается обращение к F, браузер возвращается к описанию функции и выполняет ее команды, подставляя вместо формального аргумента num фактические переменные num1, num2, num3.