В традиционных концепциях считается, что функции JavaScript проходят передачу ссылки (также называемое прохождением указателя), и некоторые люди считают, что как передача стоимости, так и передача ссылки доступны. Так что же происходит с прохождением параметров JS? Фактически, следующая демонстрация может быть использована на Java
Во -первых, давайте получим более простой, основной тип доставки:
функция добавить (num) {num+= 10; return num;} num = 10; alert (add (num)); aelrt (num); // Выход 20,10Для выходов 20 и 10 здесь, в соответствии с официальным объяснением JS, копирование выполняется при передаче параметров базового типа, так что у внешне объявленной переменной NUM и параметра функции есть точно одинаковое значение, но имеют совершенно разные адреса параметров. Никто не знает друг друга, и при возвращении вызова функции вызов функции вызов функции вызов. Следовательно, изменение параметра функции не влияет на исходные внешние переменные.
Давайте посмотрим на более сложный проход типа ссылки на объект:
Функция setName (obj) {obj.name = "ted";} var obj = new objСуть приведенного выше кода: создать объект объекта, назначить его ссылку на OBJ (в C, это непосредственно назначение адреса памяти), а затем при передаче параметров функции я сделал то же самое, что и предыдущий метод, скопировал кадр стека в OBJ параметра функции, и оба имеют одинаковое значение (он может быть понят как объект объекта), а затем в изменении объекта (он может быть понят как объект объекта), а затем в изменении объекта (его объект понят, а затем и изменяется, а затем, когда изменяется, сама объект, а затем, когда изменяется, сама объект. Java), и после завершения изменения кадр стека, соответствующий параметру функции OBJ, также должен быть выскочен.
Следовательно, соответствующий выход - значение объекта объекта после изменения
Тогда некоторые друзья могут спросить, это также можно понять как справочный проход (пропуск указателя)? Нет, строго говоря, в языках, похожих на Java, нет указателей. В Java приведенный выше процесс называется процессом анализа от символической ссылки на прямую ссылку. В C указатель - это тип с фиксированной длиной (2 байта в большинстве компиляторов C), но на Java аналогичные языки, ссылки также имеют свои собственные свойства и методы, но вы не можете напрямую доступ и контролировать его, так что это также объект в некотором смысле. Этот механизм также значительно избегает утечки памяти, и этот термин называется механизмом структурированного доступа к памяти.
Чтобы доказать вышеупомянутую точку, приведенный выше пример слегка изменен:
function setName (obj) {obj.name = "ted"; obj = new Object (); obj.name = "mary";} var obj = new objЕдинственное различие между этим примером и предыдущим примером заключается в том, что новый объект присваивается параметру функции OBJ, так что параметр функции OBJ и исходный эталонный параметр OBJ имеют совершенно разные значения и адреса памяти.
Приведенная выше статья кратко рассказывает о том, является ли передача параметров функции JavaScript - это передача значений или передача ссылки - это все, что я поделился с вами. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.