Page 133 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 133
Для ясности: объект о в функции не зависит от объекта о за пределами функции,
но оба они обращаются к одному и тому же объекту. Мы можем увидеть это раз
личие снова в присваивании.
function f ( o )
o . m essage = "Изменено в f " ;
о =
message : "Новый объект ! "
} ;
g
console . l o ( ' Bнyтpи f : o . m essage=" $ { o . m es sage } " ( п осле присваивани ) ' ) ;
я
}
let о = {
message : ' Н ачальное значение '
} ;
console . l o ( ' Пepeд вызовом f : o . m essage=" $ { o . messag } " ' ) ;
e
g
f ( о ) ;
e
console . l o ( ' П ocлe вызова f : o . message " $ { o . m e s sag } " ' ) ;
g
=
Если запустить этот пример, то можно увидеть
Перед вызовом f : о . m е s sаgе="Начальное значение "
Внутри f : o . m essage="Hoвый объект ! " (после присваивания)
После вызова f : o . m es sage=" Изменено в f "
Ключом к пониманию происходящего здесь является то, что а р гумент о (в функ
ции) - это вовсе не переменная о за пределами функции. При вызове f оба указыва
ют на один и тот же объект, но когда о присваивается объект внутри f, оно начинает
указывать на новый, независимый объект, а о вне функции все еще продолжает ука
зывать на первоначальный объект.
Базовые типы в JavaScript считаются типами значения (value type),
как и во всех других языках программирования, поскольку при пере
даче по значению они копируются. Объекты называют ссылочными
типами (reference type), поскольку при их передаче по ссылке обе пе
ременные продолжают ссылаться на один и тот же объект (т.е. обе
они содержат ссылку на тот же объект).
Определяют ли а р г ументы функцию?
Во многих языках в сигнатуру (signature) функции включаются ее аргументы. На
(
пример, в языке С функция f ( ) (без аргументов) отличается от функции f х ) (с од
(
ним аргументом), которая в свою очередь отличается от функции f х , у ) (с двумя
аргументами). В языке JavaScript такого различия нет, и когда у вас есть функция
по имени f, можете вызывать ее без аргументов, с одним аргументом или с десятью
аргументами (причем вы всегда вызовете одну и ту же функцию).
Аргументы функции 1 3 3

