Web-конструирование


Содержание:

HTML

CSS

JavaScript


Версия для печати

Встроенные функции

Все функции JavaScript рекомендуется помещать в контейнер <HEAD>...</HEAD>. Тем самым вы обеспечите их гарантированную доступность при обработке HTML-документа.

Создание функций

Существует 2 способа создать функцию. Основное отличие в результате их работы - в том, что именованная функция видна везде, а анонимная - только после объявления:

Именованные (FunctionDeclaration) Анонимные (FunctionExpression)
function имя(параметры) {
...
}
var имя = function(параметры) {

}
...
var имя = new Function(параметры, '...')
Именованные функции доступны везде в области видимости Анонимные - доступны только с момента объявления. Синтаксис new Function используется редко, в основном для получения функции из текста, например, динамически загруженного с сервера в процессе выполнения скриптов.
	/* функция sum 
	определена ниже 
	*/
	var a = sum(2,2)

	function sum(x,y) {
		return x+y
	}
	/* будет ошибка, 
	т.к sum еще не существует
	*/
	var a = sum(2,2)

	var sum = function(x,y) {
		return x+y
	}

Функции - объекты

В javascript функции являются полноценными объектами встроенного класса Function. Именно поэтому их можно присваивать переменным, передавать и, конечно, у них есть свойства:

	function f() {
		...
	}
	f.test = 6
	...
	alert(f.test) // 6

Свойства функции доступны и внутри функции, так что их можно использовать как статические переменные.

Например,

	function func() {
		var funcObj = arguments.callee

		funcObj.test++
		alert(funcObj.test)
	}
	func.test = 1
	func()
	func()

В начале работы каждая функция создает внутри себя переменную arguments и присваивает arguments.callee ссылку на себя. Так что arguments.callee.test - свойство func.test, т.е статическая переменная test.

В примере нельзя было сделать присвоение:

	var test = arguments.callee.test
	test++

так как при этом операция ++ сработала бы на локальной переменной test, а не на свойстве test объекта функции.

Объект arguments также содержит все аргументы и может быть преобразован в массив (хотя им не является).

Параметры функции

Функции можно запускать с любым числом параметров.

Если функции передано меньше параметров, чем есть в определении, то отсутствующие считаются undefined.

Следующая функция возвращает время time, необходимое на преодоление дистанции distance с равномерной скоростью speed.

При первом запуске функция работает с аргументами distance=10, speed=undefined. Обычно такая ситуация, если она поддерживается функцией, предусматривает значение по умолчанию:

	// если speed - ложное значение(undefined, 0, false...) - подставить 10
	speed = speed || 10

Оператор || в яваскрипт возвращает не true/false, а само значение (первое, которое приводится к true).

Поэтому его используют для задания значений по умолчанию. В нашем вызове speed будет вычислено как undefined || 10 = 10.

Поэтому результат будет 10/10 = 1.

Второй запуск - стандартный.

Третий запуск задает несколько дополнительных аргументов. В функции не предусмотрена работа с дополнительными аргументами, поэтому они просто игнорируются.

Ну и в последнем случае аргументов вообще нет, поэтому distance = undefined, и имеем результат деления undefined/10 = NaN (Not-A-Number, произошла ошибка).

Пример передачи функции по ссылке

Функцию легко можно передавать в качестве аргумента другой функции.

Например, map берет функцию func, применяет ее к каждому элементу массива arr и возвращает получившийся массив:

	var map = function(func, arr) {
	    var result = [ ]
	    for(var i=0; i<arr.length; i++) {
	        result[i] = func(arr[i])
	    }
	    return result
	}

Пример использования:

	map(run, [10, 20, 30])  // = [1,2,3]

Или можно создать анонимную функцию непосредственно в вызове map:

	// анонимная функция утраивает числа
	map( function (a) { return a*3 } ,  [1,2,3])  // = [3,6,9]

Практическая работа



счетчик посещений



© 2010 Е. Яковлева E-mail: lena_ngpu@mail.ru

Сайт управляется системой uCoz