Как передать параметр в функцию javascript
Перейти к содержимому

Как передать параметр в функцию javascript

  • автор:

Параметры по умолчанию

Параметры по умолчанию позволяют задавать формальным параметрам функции значения по умолчанию в случае, если функция вызвана без аргументов, или если параметру явным образом передано значение undefined .

Интерактивный пример

Синтаксис

function [name]([param1[ = defaultValue1 ][, . paramN[ = defaultValueN ]]])

Описание

В JavaScript параметры функции, которым при её вызове не передаются значения, принимают по умолчанию значение undefined . Однако в некоторых случаях может быть полезно задать иное значение по умолчанию. Именно для таких случаев предназначены параметры по умолчанию.

В прошлом для проверки параметров и задания их значений по умолчанию использовался код в теле функции, в котором проверялось, не равны ли значения параметров undefined .

В приведённом ниже примере, в случае если при вызове функции значение для параметра b не передавалось, его значением становилось undefined , и результатом вычисления a * b в функции multiply получалось значение NaN .

function multiply(a, b)  return a * b; > multiply(5, 2); // 10 multiply(5); // NaN ! 

Чтобы такого не происходило, в теле функции использовался код подобный тому, что находится во второй строчке, где в случае, если функция multiply вызывалась только c одним аргументом, параметру b присваивалось значение 1 :

function multiply(a, b)  b = typeof b !== "undefined" ? b : 1; return a * b; > multiply(5, 2); // 10 multiply(5); // 5 

С появлением в ES2015 параметров по умолчанию стало возможным обходиться без проверки параметров в теле функции. Так, в приведённом выше примере достаточно в заголовке функции указать 1 в качестве значения по умолчанию для параметра b :

function multiply(a, b = 1)  return a * b; > multiply(5, 2); // 10 multiply(5); // 5 multiply(5, undefined); // 5 

Примеры

Передача значения undefined в сравнении с передачей других «ложных» значений

Значение по умолчанию присваивается формальному параметру только если при вызове функции значение для данного параметра не было передано или было явным образом передано undefined . Если формальному параметру при вызове передано любое значение, отличное от undefined , в том числе одно из «ложных» значений, таких как false , 0 , «» , » , « , null , NaN , то в этом случае значение по умолчанию присвоено параметру не будет. Это иллюстрирует следующий пример:

function test(num = 1)  console.log(typeof num); > // num не передано, или передано undefined: test(); // 'number' (num получил значение 1) test(undefined); // 'number' (и здесь num получил значение 1) // num передано значение null или другое "ложное" значение: test(""); // 'string' (num получил значение '') test(null); // 'object' (num получил значение null) 

Параметры по умолчанию вычисляются в момент вызова функции

В Javascript параметры по умолчанию вычисляются в момент вызова функции. В отличие от языка Python, при каждом вызове функции создаётся новое лексическое окружение функции.

function append(value, array = [])  array.push(value); return array; > append(1); // [1] append(2); // [2], а не [1, 2] 

Это верно и для функций, и для переменных:

function callSomething(thing = something())  return thing; > let numberOfTimesCalled = 0; function something()  numberOfTimesCalled += 1; return numberOfTimesCalled; > callSomething(); // 1 callSomething(); // 2 

Параметры по умолчанию доступны в следующих параметрах по умолчанию

В параметрах по умолчанию можно использовать значения предыдущих (расположенных левее в списке) параметров:

function greet(name, greeting, message = greeting + " " + name)  return [name, greeting, message]; > greet("David", "Hi"); // ["David", "Hi", "Hi David"] greet("David", "Hi", "Happy Birthday!"); // ["David", "Hi", "Happy Birthday!"] 

Следующий пример ещё раз иллюстрирует эту возможность, а также позволяет ещё раз сравнить два способа достижения одного и того же результата: с использованием инициализации параметров по умолчанию и без её использования:

function go()  return ":P"; > function withDefaults( a, b = 5, c = b, d = go(), e = this, f = arguments, g = this.value, )  return [a, b, c, d, e, f, g]; > function withoutDefaults(a, b, c, d, e, f, g)  switch (arguments.length)  case 0: a; case 1: b = 5; case 2: c = b; case 3: d = go(); case 4: e = this; case 5: f = arguments; case 6: g = this.value; default: > return [a, b, c, d, e, f, g]; > withDefaults.call( value: "=^_^ token punctuation">>); // [undefined, 5, 5, ":P", , arguments, "=^_^ token function">withoutDefaults.call( value: "=^_^ token punctuation">>); // [undefined, 5, 5, ":P", , arguments, "=^_^ инициализация_с_помощью_функций_определяемых_в_теле_функции">

Инициализация с помощью функций, определяемых в теле функции

Начиная с версии Gecko 33 функции, определяемые в теле самой функции, не могут быть использованы для инициализации параметров по умолчанию; попытка это сделать приведёт к ошибке ReferenceError. Параметры по умолчанию всегда вычисляются до обработки описаний функций, определяемых в теле функции.

js
// Вызовет ошибку ReferenceError! function f(a = go())  function go()  return ":P"; > > f(); // ReferenceError: go is not defined 

Параметры без инициализации, следующие после инициализируемых параметров

До появления версии Gecko 26, следующий код приводил к SyntaxError . Это было исправлено в Firefox bug 777060 и с тех пор работает корректно. Аргументы, передаваемые при вызове функции, становятся значениями формальных параметров независимо от наличия у последних инициализации по умолчанию, а также независимо от присутствия у функции других параметров, находящихся правее в списке параметров и не имеющих инициализации.

function f(x = 1, y)  return [x, y]; > f(); // [1, undefined]; f(2); // [2, undefined]; 

Инициализация по умолчанию деструктурированных параметров

При инициализации параметров по умолчанию можно использовать синтаксическую конструкцию деструктурирующего присваивания:

function f([x, y] = [1, 2],  z: z > =  z: 3 >)  return x + y + z; > f(); // 6 

Спецификации

Specification
ECMAScript Language Specification
# sec-function-definitions

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 27 нояб. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Передача параметров в функцию JavaScript

Ну не знаю, можно и без этого конечно обойтись. Просто как то так привык ещё с плюсов - например если необходимо вернуть несколько значений из функции. Передал по ссылке несколько параметров и готово)

30 авг 2021 в 8:43

Ну так и тут так же. Передал массив. Функция изменила значения внутри массива. Если вам так будет проще, то можно считать что в JS параметры функции всегда передаются по значению. Просто для непримитивных объектов этим значением является ссылка на объект.

JavaScript - Урок 5. Параметры функции

На прошлом уроке мы написали сценарий, который вычисляет площадь прямоугольника по введенным пользователем значениям длины и ширины. Также мы написали функцию, которая собственно и производит вычисление. Но что, если у нас будет несколько html-страниц, на которых нужно будет вычислять площадь прямоугольника. Нам придется написать для каждой свою функцию? Если оставить сценарий в том виде, в котором он находится сейчас, то - ДА. Но это, как вы понимаете, не очень удобно.

Разумнее написать один раз функцию и в дальнейшем использовать ее на всех html-страницах. Для этого html-страница должна каким-то образом указать функции, какие именно значения (с какой страницы) брать для вычисления. Вот здесь нам и пригодятся параметры (те, которые указываются в круглых скобках).

Сейчас код нашей формы такой:

Передать и вызвать функцию как параметр в JS?

Я извиняюсь, за свои скупые знания. Но у меня вопрос.
У меня есть функция. К примеру
function test(fn1, fn2) if(fn1) <
console.log(blabla);
>
else fn2;
>
Мне нужно что б в условии если функция fn1 вернут тру то я что то сделаю, а если фальш то хочу вызвать функцию, которая может быть разная. И я не могу ее вшить в код, так как она будет меняться в зависимости от определенных условий. Причем с параметрами надо будет вызывать. Но js мне не дает так сделать. Expected an assignment of fanction call instead saw an expression. Я конечно пробовал в коде менять на fn2() то есть вызывать ее. И вроде ок, но тогда я не смогу передать параметры при вызове.
Что я делаю не так или это в принципе не возможно? Спасибо.

  • Вопрос задан более трёх лет назад
  • 256 просмотров

Комментировать

Решения вопроса 1

Сергей Соколов @sergiks Куратор тега JavaScript

В самом вызове test() можно обернуть исходные функции с их аргументами в функции:

function test(fn1, fn2) < if(fn1())< console.log('blabla'); >else < fn2(); >> // в вызове оборачивайте в функции: test(() => real_function1(arg0, arg1), () => real_function2(arg3));

Первый вариант предпочтительнее, но для разнообразия второй вариант – «привязать» к ним аргументы:

test(real_func1.bind(null, arg1, arg2), real_func2.bind(null, arg3));

Ответ написан более трёх лет назад

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *