【问题标题】:passing data in nested function在嵌套函数中传递数据
【发布时间】:2022-01-21 08:06:59
【问题描述】:

我是 javascript 的初学者,我试图了解在重新定义变量值的函数内部调用的函数。这是代码

var a;

function app2(a) {
  var a = 8;
  return a
}

function app(a) {
  var a = 7;
  app2(a)
  return a
}
console.log(app(a));

当我运行代码时,它仍然显示 7 作为输出。我认为它会是 8,因为我在 app 函数中调用了函数 app2。为什么值不会变成 8?我应该怎么做更新嵌套函数内的变量值?提前致谢

【问题讨论】:

  • 你怎么能在这里期待8,因为如果你获取函数app2的返回值并从app返回,你只能得到8
  • 每个函数体(即:作用域)都有自己的 a 变量的“版本”,它不是共享的(因为您在您的内部使用 var 声明了 a 变量函数)
  • @decpk 他是一个新的贡献者,并说他正在开始 js。这个问题并不难理解,他在app 中调用了app2,并希望这个函数能够修改app 中的a
  • 谢谢你的回答我已经解决了

标签: javascript node.js algorithm function


【解决方案1】:

1) 只有在获取app2 的值并在app 中使用它时,才能获得8

使用var 关键字声明的变量是函数范围的,它们在声明它的特定函数之外不可见。

app2 中声明的aapp 中不可见,除非您没有从app2 返回值,也没有在app 中使用来自app2 的返回值(这两个条件都应满足使用它)

var a;

function app2(a) {
  var a = 8;
  return a;
}

function app(a) {
  var a = 7;
  a = app2(a);  // reassign the returned value from app2
  return a;
}
console.log(app(a));

2) 如果你是退回它而不是捕获它,那么它是没有用的。你也可以这样做:

var a;

function app2(a) {
  var a = 8;
  return a;
}

function app(a) {
  var a = 7;
  return app2(a); // Directly return the value of app2 returned value
}
console.log(app(a));

【讨论】:

    【解决方案2】:

    我认为您所看到的主要罪魁祸首是您将函数的参数命名为a,并且全局命名为a。 尝试此操作时,您会期望 a = 8 当所有 var 关键字都被删除时,除了全局关键字。这不会发生,因为名为 a 的参数正在遮蔽全局 var a。当您在函数中本地使用 var 关键字时,您实际上是在告诉 javascript 您要声明一个局部函数范围的 var a,而不是引用全局 var a,因此任何更改都保留在函数范围内。

    检查一下这个sn-p:

    var a;
    
    function app2(b) { // changed argument name from `a` to `b`
      a = 8; // removed var keyword here
      return a
    }
    
    function app(b) { // changed argument name from `a` to `b`
      a = 7; // removed var keyword here
      app2(a)
      return a
    }
    console.log(app(a)); // output: 8

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2019-04-18
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多