javascript - 无法访问嵌套函数内更改的变量值

标签 javascript nested closures

我有一个巨大的业务逻辑需要在以下两个函数中执行,但我遇到了一个问题。我知道它与关闭有关,但我不知道如何解决。你能透过一些光吗?

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();

最佳答案

func2x 参数与 func1 中的 x 变量完全不同。当您执行 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();

也许是一个更好的示例,在 func2 中使用 x 的值:

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 填充其属性,这取决于用例[以及您是否遵守不变性范例])。

关于javascript - 无法访问嵌套函数内更改的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53191674/

相关文章:

javascript - 我需要下拉列表的选项卡悬停在下面的示例中,而不是单击

javascript - 访问嵌套在数组内的 JSON 对象

rust - 创建带参数闭包的回调函数,不包含 “may outlive borrowed value”或 “this closure implements ` FnOnce`,而不是 `Fn`”

javascript - Javascript 中孤独的代码块的目的是什么?

javascript - 使用 jQuery/JS 上下切换 DIV 元素

java - 从内部类的对象访问外部类函数

javascript - 为什么 Firefox 会忘记变量的值?调试解决方案?

Matlab 函数处理工作区恶作剧

javascript - 如何在按钮中使用 (a href ="#")

python-3.x - 如何从复杂字典中提取嵌套数据并从中提取嵌套数据以构建新字典?