Курсы javascript
Можно ли к событию onclick для span#val_1 привязать что-то, что будет передавать во второй аргумент функции AddIntoCart значение innerHTML вышеуказанного span ?
14.02.2013, 12:27
Регистрация: 08.11.2011
Сообщений: 806
function f(param) 1000
14.02.2013, 12:38
Регистрация: 24.10.2010
Сообщений: 46
не понял. по клику на span запускается функция f, которая в параметры для f передает значение из span. и? мне-то нужно, чтобы значение из span передавалось вторым аргументом в AddIntoCart и ждало своего часа, пока я не запущу AddIntoCart, щелкнув по ссылке.
Как передать параметр в функцию javascript
Строки, числа, логические значения передаются в функцию по значению . Иными словами при передаче значения в функцию, эта функция получает копию данного значения. Рассмотрим, что это значит в практическом плане:
function change(x) < x = 2 * x; console.log("x in change:", x); >let n = 10; console.log("n before change:", n); // n before change: 10 change(n); // x in change: 20 console.log("n after change:", n); // n after change: 10
Функция change получает некоторое число и увеличивает его в два раза. При вызове функции change ей передается число n. Однако после вызова функции мы видим, что число n не изменилось, хотя в самой функции произошло увеличение значения параметра. Потому что при вызове функция change получает копию значения переменной n. И любые изменения с этой копией никак не затрагивают саму переменную n. В итоге мы получим следующий вывод в консоли браузера
n before change: 10 x in change: 20 n after change: 10
Передача по ссылке
Объекты и массивы представляют ссылочные типы. То есть переменная или константы, которая представляет объект или массив, по сути хранит ссылку или иными словами указатель, которые указывают на адрес в памяти, где хранится объект. Например:
let bob =< name: "Bob" >;
Переменная bob формально хранит объект, в котором определено одно поле name. Фактически же переменная bob хранит ссылку на объект, который расположен где-то в памяти.
И ссылочные типы — объекты и массивы передаются в функцию по ссылке . То есть функция получает копию ссылки на объект, а не копию самого объекта.
function change(user) < user.name = "Tom"; >let bob =< name: "Bob" >; console.log("before change:", bob.name); // Bob change(bob); console.log("after change:", bob.name); // Tom
В данном случае функция change получает некоторый объект и меняет его свойство name. При вызове этой функции в нее передается значение переменной bob:
change(bob);
Но поскольку переменная bob представляет объект и хранит ссылку на некоторый объект в памяти, то функция change получае копию этой ссылки, которая указывает на тот же объект в памяти, что и переменная bob.
В итоге мы увидим, что после вызова функции изменился оригинальный объект bob, который передавался в функцию.
before change: Bob after change: Tom
Однако если мы попробуем переустановить объект или массив полностью, оригинальное значение не изменится.
function change(user)< // полная переустановка объекта user= < name:"Tom" >; > let bob =< name: "Bob" >; console.log("before change:", bob.name); // Bob change(bob); console.log("after change:", bob.name); // Bob
Почему здесь данные не изменяются? Потому что, как писалось выше, функция получает копию ссылки . То есть при передачи в функцию параметру user значения переменной bob:
change(bob);
Переменная bob и параметр user представляют две разные ссылки, но которые указывают на один и тот же объект.
При присвоении параметру в функции другого объекта:
user= < name:"Tom" >;
ссылка user начиначет указывать на другой объект в памяти. То есть после этого bob и user — две разные ссылки, которые указывают на два разных объекта в памяти.
То же самое касается массивов:
function change(array) < array[0] = 8; >function changeFull(array) < array = [9, 8, 7]; >let numbers = [1, 2, 3]; console.log("before change:", numbers); // [1, 2, 3] change(numbers); console.log("after change:", numbers); // [8, 2, 3] changeFull(numbers); console.log("after changeFull:", numbers); // [8, 2, 3]
Передача параметров в функцию JavaScript
Ну не знаю, можно и без этого конечно обойтись. Просто как то так привык ещё с плюсов — например если необходимо вернуть несколько значений из функции. Передал по ссылке несколько параметров и готово)
30 авг 2021 в 8:43
Ну так и тут так же. Передал массив. Функция изменила значения внутри массива. Если вам так будет проще, то можно считать что в JS параметры функции всегда передаются по значению. Просто для непримитивных объектов этим значением является ссылка на объект.
Как передать параметр в функцию javascript
Строки, числа, флаги передаются в функцию по значению.
То есть при передаче параметра в функцию если параметр (строка, число, флаг) то для такого параметра создается копия и внутри функции мы работаем с копией параметра.
При выходе из функции:
параметр не меняет значение
копия параметра меняет значение но разрушается при выходе из функции
Html Пример передача параметра по значению
// объявляем функцию
function SetValue(x)
<
x = 10;
>
// создаем переменную
var a = 20;
// вызываем функцию
SetValue(a);
alert (a); // увидим на экране 20
Объяснение: SetValue функция не поменяла значение после выхода
2) Передача параметров по ссылке в функцию
Объекты и массивы передаются в функцию по ссылке.
То есть при передаче параметра в функцию если параметр (объект, массив) то такой параметр передается внутрь функции и мы работаем с этим параметром.
При выходе из функции:
параметр меняет значение
Html Пример 1 передача параметра по ссылке
// объявляем функцию
function ShowMyText(x)
<
x.age = 10;
>
// вызываем функцию
ShowMyText(a);
alert (a.age); // увидим на экране 10 то есть функция поменяла age
Объяснение: В функцию мы передаем объект
Внутри функции мы меняем свойство(элемент) у объекта
Html Пример 2 передача параметра по ссылке (ничего не поменялось)
// объявляем функцию
function ShowMyText(x)
<
x = ;
>
// вызываем функцию
ShowMyText(a);
alert (a.age); // увидим на экране 20 функция не поменяла объект
Объяснение: В функцию мы передаем объект
Внутри функции ShowMyText мы меняем объект x = ;
После выхода из функции ссылка на новый объект потерялась (потому что x указывает на новый объект)
← Предыдущая тема
Переменные внутри функции (время жизни переменных внутри функции) JavaScript | стандарт ES5
Следующая тема →
Как узнать . существует ли функция по названию В JavaScript? Пример: typeof calcSum == «function» | стандарт ES5
