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

const f1 = function(data) {
   var a = data.modifyMethod()   
   f2 ()

}

const f2 = function() {
  console.log(a)
  return a
}


Функция f2 не видит переменную a .
Я понимаю, что связано что-то с замыканиями, но никак не могу понять - что нужно сделать, чтобы f2 видело a, не передавая ее в качестве параметра функции?
Вроде как доступ к областям видимости родительских функций (тех кто вызвал данную функцию) должен ведь быть.

(функцию f1 экспортирую в качестве модуля)
  • Вопрос задан
  • 857 просмотров
Решения вопроса 3
longclaps
@longclaps
Ух, поклонники глобальных переменных фестиваль констант устроили. Зачем, спрашивается?
function foo() {
    bar.a = 42;
}

function bar() {
    console.log(bar.a)
}

foo();
bar();
Ответ написан
l3ftoverz
@l3ftoverz Куратор тега JavaScript
Люблю Финский металкор
Потому, что у тебя не замыкание, нужно или так (можно без вложения в функцию):
UPD: А лучшее вообще используй аргументы.

(function () {
  var a;

  const f1 = function(data) {
    a = 1;
    f2();
  }

  const f2 = function() {
    console.log(a)
    return a
  }
})();


Или объявлять f2 внутри f1

function f1 () {
  var a = 1;
  
  const f2 = function () {
    console.log(a):
  }

  f2();
}
Ответ написан
4mobile
@4mobile
WEB developer
Странная задача, но можно и так ее решить
function f1 (data) {
   const a = {data: data}
   const f3 = f2.bind(a)
   f3()
}

function f2(){
  console.log(this.data)
}

f1('dddddd');

Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@andreysuha
Что то знаю
Как вариант объявит ее в глобальном скопе

var a = 1
const f1 = function(data) {
   f2 (data)
}

const f2 = function(data) {
  console.log(a)
  return a
}
Ответ написан
Область видимости переменной
var a;
const f1 = function(data) {
   a = 1   
   f2 ()

}

const f2 = function() {
  console.log(a)
  return a
}
Ответ написан
@Sashqa
let a;
const f1 = function (data) {
  a = 1   
  f2 ()

}

const f2 = function() {
  console.log(a)
  return a
}
f1(data);
Ответ написан
Tuerer
@Tuerer
C#, java programmer
Не понимаю, чем этот вариант не нравится?

const f1 = function(data) {
var a = data.modifyMethod()
f2 (a)
}

const f2 = function(myvar) {
console.log(myvar)
return myvar
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Stream Labs Москва
До 150 000 ₽
Myagi Минск
от 3 000 до 4 000 $
Salesbeat Москва
от 150 000 до 250 000 ₽
17 февр. 2020, в 00:30
1500 руб./за проект
16 февр. 2020, в 22:28
2000 руб./за проект
16 февр. 2020, в 22:03
1200 руб./в час