Невозможно получить доступ к измененному значению переменной во вложенных функциях - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть огромная бизнес-логика, которая должна быть выполнена в обеих перечисленных ниже функциях, но я столкнулся с одной проблемой. Я знаю, что это связано с закрытием, но как решить, я не знаю. Можете ли вы через некоторый свет.

function func1() {                
                var x = false;
                console.log('before going inside func '+x);
                func2(x); 
                console.log('After coming outside => '+x);
 //Instead of true its displaying false
            
}

function func2(x)
{
              x = true;
              console.log('inside func => '+ x);
}

func1();

Моя первоначальная проблема, как показано ниже

function func1() {                
  var x = false;
  var y =1;
  var z=3;

  func2(x,y,z);    
  
  console.log(x,y,z);
  //INSTEAD OF true,10,30; its displaying false,1,3          
}

function func2(x,y,z)
{
   x = true;
   y=10;
   z=30;
              
}

func1();

1 Ответ

0 голосов
/ 07 ноября 2018

Параметр x в func2 полностью отличается от переменной x в func1. Когда вы делаете func2(x), значение из x передается в func2, а не как ссылка на переменную. (Некоторые языки делают это; JavaScript нет.)

Чтобы вернуть информацию из функции, используйте return в функции и используйте возвращаемое значение функции там, где вы ее вызываете:

function func1() {
  var x = false;
  console.log('before ' + x);
  x = func2(x); // *** Note `x =`
  console.log('after ' + x); 
 }

function func2(x) {
  return true;
}

func1();

Возможно, лучший пример, используя значение x в func2:

function func1() {
  var a = 1;
  var b = 12;
  console.log('a before: ' + a); 
  a = func2(a);
  console.log('a after:  ' + a); 
  console.log('b before: ' + b); 
  b = func2(b);
  console.log('b after:  ' + b); 
 }

function func2(x) {
  return x * 2;
}

func1();

Если у вас есть сложная информация, которую нужно вернуть, вернуть объект со свойствами для сложной информации (или передать объект, и у вас есть func2 заполнить свойства для него, это зависит от варианта использования [и от того, придерживаясь парадигм неизменности]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...