Функции лежат в основе практически всего полезного, что можно сделать с помощью JavaScript. Вообще говоря, они предлагают возможность разбить программу на логические куски, каждый из которых реализует определенный фрагмент функциональности. Они являются центральным
Отметим, что примеры функций доступны для загрузки, а также связаны ссылками с соответствующими местами в лекции ниже.
Лекция имеет следующую структуру:
Вы, конечно, не хотели бы иметь в спецификациях обновление памяти, всякий раз, когда необходимо выполнить определенное вычисление, значительно лучше просто закодировать вычислительные действия один раз, объединить их как функцию calculateSomething, а затем указывать на эту реализацию всякий раз, когда потребуется выполнить эти действия. Этот простой акт
Помня об этом, вопрос "почему" для функций имеет очень простой ответ: они являются базовыми строительными блоками, которые позволяют структурировать код для улучшения понимания его назначения, и для
Более того, разбиение кода на хорошо продуманные функции значительно облегчает в будущем обслуживание кода. Представьте, например, что правила перехода на летнее время снова изменились в следующем году. Если вы выполняете эти вычисления девяносто пять раз в течение проекта, вы можете внести новые ошибки при обновлении кода в каждом из этих мест; это повторяющаяся, ручная и подверженная ошибкам работа. С другой стороны, изменение одной функции calculateDaylightSavings позволяет распространить это единственное изменение по всей программе с помощью одного исправления, точно также как CSS распространяет стилевое оформление на странице. Таким образом, функции делают обслуживание значительно менее подверженным ошибкам, и облегчают успешную реализацию.
Определение функции является простой задачей. В качестве примера давайте создадим функцию, которая генерирует случайный цвет фона для элемента на странице (http://dev.opera.com/articles/view/javascript-functions/functions_1.html):
function setElementBackground() {
var red = Math.floor(Math.random() * 256);
var green = Math.floor(Math.random() * 256);
var blue = Math.floor(Math.random() * 256);
var obj = document.getElementById('element_to_change');
if ( obj ) {
obj.style.background = 'rgb(' + red + ',' + green + ',' + blue + ')';
}
}
Не беспокоясь слишком много о выполняемом в
function, что, конечно, имеет смысл.setElementBackground (задатьФонЭлемента) значительно лучше, более описательное имя функции, чем что-нибудь вроде coloursAreNice (цветаПрекрасны) или crazySetter (безумныеНастройки).Теперь, когда функция определена, чтобы вызвать ее где-то в коде, необходимо просто написать:
setElementBackground();
Вот и все! Вам не нужно больше заботиться о сложных внутренних деталях setElementBackground ; вы уже написали код, поэтому теперь можно легко использовать его в любом другом месте и пожинать (случайные) вознаграждения за
Теперь только что написанная функция является полностью самодостаточной. Она выполняет некоторые действия, а затем завершается, она не нуждается во вводе из кода, который ее вызывает, и не возвращает вызывающей стороне никакой информации о том, что произошло. JavaScript, конечно, позволяет писать код, который несколько более словоохотлив и гибок, чем этот, поэтому давайте посмотрим, как использовать ввод и вывод информации из функций.
Передача информации в функцию, чтобы повлиять на ее поведение, является прекрасным способом сделать ее более гибкой и полезной во множестве ситуаций. Например, я жестко закодировал id элемента, фон которого изменяется внутри функции setElementBackground, было бы хорошо иметь возможность указать различные элементы на странице во время вызова функции, чтобы можно было бы повторно использовать эту функцию для различных элементов, вместо дублирования всего кода. Решением являются
Ранее было отмечено, что определение функции содержит пару скобок сразу после имени функции. Это список
function setElementBackground( elementID ) {
var red = Math.floor(Math.random() * 256);
var green = Math.floor(Math.random() * 256);
var blue = Math.floor(Math.random() * 256);
var obj = document.getElementById( elementID );
if ( obj ) {
obj.style.background = 'rgb(' + red + ',' + green + ',' + blue + ')';
}
}
Вызов этой функции с ID элемента, передаваемым в качестве
setElementBackground( 'element_to_change' );
Если вы случайно вызовете функцию без передаваемого
if ( elementID == undefined) {
// Это условие будет `true` если переменная `elementID`
// не была определена вызывающей стороной.
// Затем можно написать некоторый код внутри этого
// оператора if, чтобы остановить код от порождения ошибки.
}
Немного смущающий, но хороший, факт об elementID определяется как elementID, которая не оказывает никакого влияния на переменные вне функции - можно иметь другую переменную, вне этой функции, с таким же именем, и ее
var elementID = "No change!"; setElementBackground( 'element_to_change' ); alert( elementID ); // Alerts "No change!";
Это имеет очень важный побочный эффект. JavaScript создает новую переменную внутри функции, что означает, что любые изменения, которые происходят с внутренним Substring (подстрока), получающую строку и начальную позицию:
function substring( obj, start ) {
obj = obj.substring(start);
}
var myString = "This is a string!";
substring(myString, 8);
alert(myString); // Alerts "This is a string!"
Даже хотя переменная obj переназначается внутри функции результату встроенного метода substring, переменная myString никак не изменяется, изменилась только копия myString, находящаяся внутри substring.
Это поднимает вопрос коммуникации: если изменение
На самом деле достаточно распространено, что функция выполняет некоторые вычисления, и выдает результат этой работы вызывающей стороне для использования в другом месте. Может быть полезно, например, чтобы наша функция setElementBackground возвращала массив return, как показано ниже:
function setElementBackground( elementID ) {
var red = Math.floor(Math.random() * 256);
var green = Math.floor(Math.random() * 256);
var blue = Math.floor(Math.random() * 256);
var obj = document.getElementById( elementID );
if ( obj ) {
obj.style.background = 'rgb(' + red + ',' + green + ',' + blue + ')';
}
return [ red, green, blue ];
}
посмотрите на улучшенный второй пример в действии (http://dev.opera.com/articles/view/javascript-functions/functions_3.html).
Это простое добавление означает, что теперь можно вызывать функцию таким образом, чтобы сохранить ее результат в переменной:
var my_result = setElementBackground('element_to_change');
Даже если функция не нуждается в true или false, соответственно. Помня об этом, я изменил setElementBackground, чтобы возвращать false, если передаваемый функции elementID в действительности не существует:
function setElementBackground( elementID ) {
var red = Math.floor(Math.random() * 256);
var green = Math.floor(Math.random() * 256);
var blue = Math.floor(Math.random() * 256);
var obj = document.getElementById( elementID );
if ( obj ) {
obj.style.background = 'rgb(' + red + ',' + green + ',' + blue + ')';
return [ red, green, blue ];
} else {
return false;
}
}
посмотрите в действии третий усовершенствованный пример (http://dev.opera.com/articles/view/javascript-functions/functions_4.html).
Это позволяет контролировать, что код выполнился правильно, проверяя, например,
if ( !setElementBackground('element_does_not_exist') ) {
alert("Что-то пошло неправильно! 'element_does_not_exist' не существует!");
}
Кроме того, обратите внимание, что return в действительности завершает выполнение функции сразу, как только оно вызывается, возвращая процесс выполнения в точку, в которой была вызвана функция. Код, расположенный ниже вызова return, не выполняется - он просто игнорируется.
Теперь вы знаете почти все, что нужно, чтобы начать активно использовать функции в коде. Они являются фундаментальной частью хорошего кода JavaScript, и программы будут лучше организованы, чище и более удобочитаемыми, и станут легче для понимания, если вы воспользуетесь возможностью поместить код в хорошо именованные функции для
'setElementBackground' массив цветов? Попробуйте изменить код, чтобы получать еще один 
Майк Вест является студентом философии, который ловко маскируется под опытного и успешного web-разработчика. Он работает с web более десяти лет, в последнее время в команде, которая отвечает за создание европейских новостных сайтов Yahoo!.
После того как он покинул в 2005 году широкие пригородные равнины Техаса, Майк поселился в Мюнхене, Германия, где он сражается с языком каждый день все в меньшей степени. mikewest.org (http://mikewest.org/) является его домом в web, собирающим (понемногу) его письменные творения и ссылки для потомства. Он хранит свой код на сайте GitHub (http://github.com/mikewest).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.