Page 132 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 132
вызываете функцию, ее аргументы получают значения, которые вы передаете, а не
сами переменные. Рассмотрим следующий код.
(
function f х ) {
сопsоlе . l о ( ' Внутри f : х=$ { х } ' ) ;
g
х = 5 ;
g
я
console . l o ( ' Bнyтpи f : х=$ { х } (после присваивани ) ' ) ;
let х = З ;
console . l og ( ' Пepeд вызовом f : х=$ { х } ' ) ;
f ( х ) ;
g
console . l o ( ' Пocлe вызова f : х=$ { х } ' ) ;
Если вы запустите этот пример, то увидите
Перед вызовом f : х=З
Внутри f : х=З
Внутри f : x=S ( п осле присваивания)
После вызова f: х=З
Здесь важно то, что присваивание значения х в функции не затрагивает перемен
ную х вне функции; дело в том, что это две разные сущности, имена которых случай
но совпали.
Всякий раз, когда мы присваиваем аргумент функции, это никак не влияет ни
на какие переменные за пределами функции. Т е м не менее вполне возможно изме
нить тип объекта (object type) в функции способом, который изменит сам объект,
видимый за пределами функции.
(
functioп f о ) {
o . m essage = ' И зменено в f (предыдущее значение : 1 $ { 0 . m e s sage } ' ) ' ;
let о = {
message : " Н ачальное значение "
} ;
e
console . l o ( ' Пepeд вызовом f : o . m essage=" $ { o . m e s sag } " ' ) ;
g
f о ) ;
(
g
e
=
console . l o ( ' Пocлe вызова f : o . m essage " $ { o . m essag } " ' ) ;
Это даст следующий результат.
Перед вызовом f : о . m е s s аgе=" Н ачальное значение"
После вызова f: о . m е s s аgе= " И зменено в f ( п редьщущее значение :
' Н ачальное значение ' ) "
В этом примере мы видим, что внутри функции f был изменен объект о, и эти
изменения повлияли на объект о за пределами функции. Это выявляет основное раз
личие между базовыми типами и объектами. Базовые типы не могут быть изменены
(можно изменить только значение переменной базового типа, но само базовое значе
ние при этом не изменяется). Объекты, напротив, могут быть изменены.
1 3 2 Глава 6. Функции

