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

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

}

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


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

(функцию f1 экспортирую в качестве модуля)
  • Вопрос задан
  • 852 просмотра
Решения вопроса 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
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 130 000 до 150 000 руб.
Zoon Москва
от 150 000 до 300 000 руб.
от 80 000 до 160 000 руб.
16 окт. 2019, в 17:12
300 руб./за проект
16 окт. 2019, в 17:11
3000 руб./за проект
16 окт. 2019, в 17:07
3800 руб./за проект