Добавляем...


  Передача парамтров
Примитивные типы данных передаются в JavaScript по значению. Это значит, что при передаче функции переменной создается копия этой переменной, чтобы при изменении параметра функции, содержащего примитивные данные, исходное значение оригинальной переменной оставалось нетронутым. Лучше всего это проиллюстрировать на примере:

function fiddle (argl)
{
argl = 10;
document.write("Внутри функции fiddle arg1 = "+argl+"<br />");
}
var x = 5;
document.write("До вызова функции x = "+x+"<br />");
fiddle (x) ;
document.write("После вызова функции x = "+x+"<br />");

В результате его выполнения получим:
До вызова функции x = 5
Внутри функции fiddle arg1 = 10
Посе вызова функции x = 5

Обратите внимание на то, что функция fiddle не меняет значение переменной х, поскольку эта функция получает только копию х.
    В отличие от примитивных типов данных, составные типы, например массивы и объекты, передаются по ссылке, а не по значению. По этой причине типы данных, не являющиеся примитивными, часто называют "ссылочными типами". Когда функции передается ссылочный тип данных, сценарий в теле функции, модифицирующий параметр, модифицирует и оригинальное значение в контексте вызова. Вместо копии оригинальных данных функция получает ссылку на них. Рассмотрим следующую модификацию функции fiddle:

function fiddle (arg1)
{
argl[0] = "другое";
document.write("Внутри функции fiddle argl = "+argl+"<br />");
}
var x = ["одно", "второе", "третье"];
document.write("До вызова функции х = "+x+"<br />");
fiddle (х) ;
document.write("После вызова функции х = "+x+"<br />");

В этой ситуации функция fiddle может изменить значения массива, содержащегося в переменной х, как показано ниже:
В результате его выполнения получим:
До вызова функции x = одно, второе, третье
Внутри функции fiddle argl = другое,второе, третье
После вызова функции к = другое,второе,третье

    В этой ситуации функция fiddle может изменить значения массива, содержащегося в переменной х, как показано выше:
    Это "передача по ссылке" в действии. Функции передается указатель на объект, а не копия этого объекта. К счастью, в отличие от других языков (таких как, например, С) JavaScript не заставляет пользователя заботиться об указателях или об освобождении параметров от ссылок. Если вы хотите изменить значения внутри функции, просто передайте их в составе объекта. Например, если нужно изменить внутри функции значение некоторой строки, эту строку нужно "завернуть" в Object:

function fiddle (argl)
{
argl.myString = "Новое значение";
document.write("Внутри функции fiddle argl.myString = "+argl.myString+"<br />");
}
var x = new Object();
x.myString = "Исходное значение";
document.write("До вызова функции x.myString = "+x.myString+"<br />");
fiddle (x) ;
document.write("После вызова функции x.myString = "+x.myString+"<br />");

В результате его выполнения получим:
До вызова функции х.myString = Исходное значение
Внутри функции fiddle argl.myString = Новое значение
После вызова функции х.myString = Новое значение

Конечно, вместо этого для возвращения нового значения можно было бы использовать оператор return.
назад: Операторы return далее:


добавить комментарий
(без перезагрузки и регистрации)


10 случайных разделов

Что ищем на сайте ?


Примеры кода на сайте







@ 2008-2011 Amber
При использовании материалов ссылка на сайт обязательна
Яндекс.Метрика