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

Хочу показать на простом примере:

первая функция:

const sayHi() {
  const hi = 'Hi';
  say();
}

вторая функция:

const say = () => {
  console.log(hi); 
// как сюда передать значение переменной hi из соседней функции?
}

Ответы (4 шт):

Автор решения: Alexey Ten

Нельзя получить значение локальной переменной из соседней функции.

Что бы передать параметр, его нужно, эээ, передать. Например так:

const sayHi = () => {
  const hi = 'Hi';
  say(hi);
};

const say = (str) => {
  console.log(str);
};
→ Ссылка
Автор решения: xxramm

В дополнении к предыдущему ответу. Вы можете задать глобальную переменную var hi = 'Hi'; Проверить, что переменная является глобальной можно через window.hi; Но уровень "чистоты" данного решения, зависит от задачи.

→ Ссылка
Автор решения: Артур Франк

Для передачи переменной во вторую функцию нужно использовать подобную конструкцию:


const sayHi = () => {
    const hi = "HI";
    say(hi) // Передаем объявленную переменную из первой функции во вторую
}

const say = (hi) => {
    console.log(hi)
}


sayHi();

const hi = "HI"; будет видима только для функции в которой вы ее объявили.

Для того чтобы переменную сделать видимой для всех функций в файле нужно ее объявить глобально для этого файла. Вот так:

const hi = "HI";

const sayHi = () => {
    say(hi) // Функция видит переменную которая в ней не объявлена
}

const say = (hi) => {
    console.log(hi)
}


sayHi();
→ Ссылка
Автор решения: niknils

Итак, давайте подумаем:

  1. Элевация кода / модификация функции (см. .toString() -> парсим тело функции, добавляем переменную, элевация и вот названная локальная переменная в рамках иной функции; можно, кстати, прям там и объявить эту функцию, либо .toString());
  2. Глобальные переменные (window.myvar) или же даже ([window|process].mysecurenamespace.myvar); никто не мешает сделать вспомогательную обработку mysecurenamespace вида for (var _Tvar of window.mysecurenamespace) {eval(`var ${_Tvar}=window.mysecurenamespace.${_Tvar};`)}; однако, любителям констант<-чисто гуманитарная штука (+ весят в памяти + delete в 'use strict' отдельная тема) не подходит.
  3. var _Tarr=[];for (var _Tvar in Array.from(arguments) {_Tarr.push(`arguments[${_Tvar}]`)}; eval(`myAnotherFunc(${_Tarr.join(',')})`)
→ Ссылка