1. Передача по значению (по значению)
Значение переменной копируется и не имеет ничего общего с исходным значением. То есть, даже если новое значение будет изменено, исходное значение не изменится. В JavaScript базовые типы передаются по значению.
Скопируйте код кода следующим образом:
функция testPassValue()
{
вар м=1;
вар n=2;
//Копируем значения m и n и передаем их в passValue
passValue (м, п);
alert(m); // будет исходное значение
}
функция passValue(a,b)
{
a = a+b; //Изменяем значение a, здесь a — просто копия исходного значения
предупреждение(а);
}
Результат вывода:
3
1
2. По ссылке.
В функцию передается копия самой ссылки. Объект, на который указывает ссылка, не копируется и не передается (то же самое происходит и в Java, если значение атрибута объекта изменено, поскольку исходное). ссылка указывает на тот же объект. Следовательно, доступ к измененному значению будет осуществляться через исходную ссылку;
Но если вы просто укажете ссылку на новый объект в функции, значение исходного объекта не изменится, изменится только скопированная ссылка.
Скопируйте код кода следующим образом:
функция testPassValue()
{
вар дата = новая дата (2006,02,27);
alert(date.getDate()); //Выход: 27
//Копируем саму ссылку на дату и передаем ее в passReference. Обратите внимание, что объект, на который указывает дата, не был скопирован.
passReference (дата);
alert(date.getDate()); //Выход: 12
//То же, что и выше
изменитьСсылку (дата);
alert(date.getDate()); //Выход по-прежнему 12
}
функция passReference(да)
{
//Поскольку da и исходная ссылка указывают на один и тот же объект, вне функции, доступ к исходной ссылке будет значением атрибута даты объекта, которое будет измененным значением.
da.setDate(12);
}
функция ChangeReference(da)
{
//На данный момент ссылка da фактически является копией исходной ссылки. Само переназначение ссылки не повлияет на исходную ссылку.
да = новая дата (2007,05,11);
//Укажите ссылку da на новый объект. В это время исходная ссылка все еще указывает на исходный объект.
alert(da.getDate()); // Результат: 11
}
3 специальные строки
В JavaScript String также передается по ссылке. В js есть только метод charAt, но нет соответствующего метода модификации. Он аналогичен String в Java и имеет неизменяемость.
Скопируйте код кода следующим образом:
вар s1 = "привет";
var s2 = «ад» + «о»;
если (s1 == s2)
alert("s1 = s2"); //Будет ли это предложение выполнено? Люди, знакомые с Java, могут подумать, что оно не будет выполнено (я весьма критично отношусь к этому предложению, оно тоже выполняется в Java!), потому что в java == сравнивается на тождественность. На самом деле в js String== сравнивает, равны ли значения, поэтому это предложение будет выполнено. Но для других сравнений Object == оно такое же, как и в Java.