Передача переменой в функцию в JavaScript
В этом заметке мы передавали в функцию (в качестве ее параметров) числа и переменные.
Переменные содержали произвольные числовые значения, с которыми проводилась работа в теле функции (числа складывались, умножались и т.п.).
При работе с функциями важно понимать , каким образом ей передаются переменные?
Что происходит со значениями этих переменных?
Так вот, Javascript копирует значение переменной в функцию, а исходное значение переменной останется прежним .
1) Допустим, есть произвольная переменная test , принимающая числовое значение 1 .
2) И функция doIt с параметром param , которая увеличивает значение этого параметра на 1 , а затем его возвращает.
function doIt(param) param = param + 1;
return param;
>
3) Что произойдет, если аргументом функции в качестве ее параметра указать переменную test ?
Пример передачи переменной в функцию
function doIt(param) param = param + 1;
return param;
>
result = doIt( test );
document.write(«Результат работы функции: » + result );
document.write(»
Исходное значение переменной: » + test );
Результат работы функции: 2
Исходное значение переменной: 1
Комментарии: как происходит передача переменной в Функцию?
Сначала мы вызываем функцию и передаем ей в аргументе переменную test (указываем ее в качестве параметра функции).
doIt(test);
При этом в функцию передается значение переменной, то есть число 1 .
Затем результат работы функции заносится в переменную result :
result = doIt(test) , которая далее выводится на экран.
Мы видим, что в результате своей работы функция выдает число 2 , что является лишь изменением переданного ей значения переменной test , но не самой переменной .
Таким образом, при передаче переменной в функцию, в нее копируется значение переменной , а но не сама переменная .
Читайте также.
Передача объекта в Функцию — Переменная ссылается на объект
Передача функции в функцию — Первоклассные значения
Создание переменных — Присвоение значений переменным
Операции над переменными – Сложение чисел и строк
Объявление переменных — Ключевые слова let, const и var
Функция isNaN — Число или не число
Функции parseInt, parseFloat — Конвертация строк
Javascript передать переменную в функцию
Передача параметров по значению
Строки, числа, логические значения передаются в функцию по значению. Иными словами при передаче значения в функцию, эта функция получает копию данного значения. Рассмотрим, что это значит в практическом плане:
function change(x) < x = 2 * x; console.log("x in change:", x); >var 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.
Передача по ссылке
Объекты и массивы передаются по ссылке. То есть функция получает сам объект или массив, а не их копию.
function change(user) < user.name = "Tom"; >var bob =< name: "Bob" >; console.log("before change:", bob.name); // Bob change(bob); console.log("after change:", bob.name); // Tom
В данном случае функция change получает объект и меняет его свойство name. В итоге мы увидим, что после вызова функции изменился оригинальный объект bob, который передавался в функцию.
Однако если мы попробуем переустановить объект или массив полностью, оригинальное значение не изменится.
function change(user)< // полная переустановка объекта user= < name:"Tom" >; > var bob =< name: "Bob" >; console.log("before change:", bob.name); // Bob change(bob); console.log("after change:", bob.name); // Bob
То же самое касается массивов:
function change(array) < array[0] = 8; >function changeFull(array) < array = [9, 8, 7]; >var 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]