- •Создание документа в html
- •Пример документа в html
- •Основные элементы
- •Заголовки документов
- •Заголовки разделов документов
- •Лекции по JavaScript Что такое javascript?
- •Среда разработки программ JavaScript
- •Что умеет javascript?
- •Форматирование
- •Очистка текущего документа
- •Типы переменных
- •Встроенные объекты
- •Объект Array
- •Методы объекта Array
- •Многомерные массивы
- •Объект Boolean
- •Объект Number
- •Объект Math
- •Объект String
- •Основы работы со строками
- •Использование кавычек
- •Встроенные функции
- •Строки и числа
- •Число → строка
- •Строка → число
- •Объект Date
- •Объект Global
- •Объект RegExp
- •Операторы Javascript
- •Оператор break
- •Оператор comment
- •Оператор continue
- •Оператор for
- •Оператор for...In
- •Оператор function
- •Оператор if...Else
- •Оператор return
- •Оператор var
- •Оператор while
- •Оператор with
- •Логические операторы
- •Функции
- •Функции - объекты в javascript функции являются полноценными объектами встроенного класса Function. Именно поэтому их можно присваивать переменным, передавать и, конечно, у них есть свойства:
- •Области видимости
- •Параметры функции
- •Работа с неопределенным числом параметров
- •Пример передачи функции по ссылке
- •Сворачивание параметров в объект
Работа с неопределенным числом параметров
Непосредственно перед входом в тело функции, автоматически создается объектarguments, который содержит
Аргументы вызова, начиная от нуля
Длину в свойстве length
Ссылку на саму функцию в свойстве callee
Например,
01 |
function func() { |
|
02 |
for(var i=0;i<arguments.length;i++) { |
03 |
alert("arguments["+i+"] = "+arguments[i]) | |
04 |
} |
|
05 |
} |
|
06 |
func('a','b',true) |
07 |
|
|
08 |
// выведет |
09 |
// arguments[0] = a |
10 |
// arguments[1] = b |
11 |
// arguments[2] = true |
Свойство arguments похоже на массив, т.к у него есть длина и числовые индексы. На самом деле arguments не принадлежит классу Array и не содержит его методов, таких как push, pop и других.
Если все же хочется воспользоваться этими методами, например, чтобы вызвать другую функцию с теми же аргументами, но кроме первого, можно создать изarguments настоящий массив:
1 |
var args = Array.prototype.slice.call(arguments) |
|
2 |
// .. теперь args - настоящий массив аргументов .. |
3 |
args.shift() | |
4 |
... |
|
Вызвать функцию для массива аргументов можно при помощи apply:
var func = function(a,b) { alert(a+b) } | |
var arr = [1,2] |
|
func.apply(null, arr) // => alert(3) |
Пример передачи функции по ссылке
Функцию легко можно передавать в качестве аргумента другой функции.
Например, map берет функцию func, применяет ее к каждому элементу массива arrи возвращает получившийся массив:
1 |
var map = function(func, arr) { | |
2 |
var result = [ ] |
|
3 |
for(var i=0; i<arr.length; i++) { | |
4 |
result[i] = func(arr[i]) |
|
5 |
} |
|
6 |
return result |
7 |
} |
Пример использования:
map(run, [10, 20, 30]) // = [1,2,3] |
Или можно создать анонимную функцию непосредственно в вызове map:
// анонимная функция утраивает числа |
|
map( function (a) { return a*3 } , [1,2,3]) // = [3,6,9] |
Сворачивание параметров в объект
Бывают функции, аргументы которых сильно варьируются.
Например:
1 |
// можно указать только часть аргументов |
|
2 |
// не указанные - вычисляются или берутся по умолчанию |
3 |
function resize(toWidth, toHeight, saveProportions, animate) { | |
4 |
// значения по умолчанию |
|
5 |
saveProportions = saveProportions || true | |
6 |
animate = animate || true |
|
7 |
toHeight = toHeight || ... | |
8 |
} |
|
Вызов с необязательными параметрами приходится делать так:
resize(100, null, null, true) |
Чтобы избежать лишних null и сделать код более понятным, используют нечто вроде "keyword arguments", существующих в Python и Ruby. Для этого много параметров пакуют в единый объект:
1 |
function resize(setup) { |
|
2 |
// значения по умолчанию |
3 |
var saveProportions = setup.saveProportions || true | |
4 |
var animate = setup.animate || true |
|
5 |
var toHeight = setup.toHeight || ... | |
6 |
} |
|
Вызов теперь делается гораздо проще:
1 |
var setup = {toWidth: 100, animate: true} | |
2 |
|
|
3 |
resize(setup) | |
4 |
// или |
|
5 |
resize({toWidth: 100, animate: true}) |
Так - куда понятнее. А если параметров больше 5, то вообще - единственный нормальный способ.
Кроме того, с объектом можно удобнее делать последовательности вызовов вроде:
1 |
var setup = {toWidth: 100, animate: true, saveProportions: false} | |
2 |
|
|
3 |
resize(setup) | |
4 |
|
|
5 |
setup.toWidth = 200 | |
6 |
resize(setup) |
|
Функции в Javascript - это вторая по важности (после объектов) конструкция в Javascript. Например, если нужно при наведении мыши на кнопку создать выпадающее меню или плавно развернуть вкладку - это всё делается с помощью функций.
Рассмотрим синтаксис функции:
<script type="text/javascript"> function имя функции (аргумент1,аргумент2...) { команды, которые должна исполнить функция;
return (переменные или другие объекты, которые должна возвратить функция.
Если таковых нет - return не пишем.); } </script>
Для вызова функции непосредственно в самом скрипте достаточно написать её имя и, если нужно, - её параметры, например, напишем и применим функцию, которая будет суммировать две переменные:
<script type="text/javascript"> var sa = 100;
var sha = 1;
function summa (a,b) { var sum = a + b;
return (sum); }
document.write(summa(sa,sha));/*это упрощенная запись, если не
понятно - вот неупрощенный код*/
var result = summa(sa,sha);
document.write(result);
</script>
Итак, - мы знаем как создать и применить в скрипте функции. Давайте научимся вызывать их с помощью кнопки на страничке. Для этого достаточно у параметра href вместо адреса прописать такой код: javascript:имя функции(/*и если нужно - то здесь можно прописать и её параметры*/); Давайте таким способом доделаем прошлый скрипт, чтобы вызывать функцию summ с помощью кнопки. Для этого нужно сверстать такой код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Сумма</title>
<script type="text/javascript"> var sa = 100;
var sha = 1;
function summa (a,b) { var sum = a + b;
return(sum); }
function wivodNaDispley()
{
document.write(summa(sa,sha));
} </script>
</head>
<body>
<h3 align="center"><a href="javascript:wivodNaDispley();">Вычислить</a></h3>
</body>
</html>