Javascript 第一个函数使用第二个函数中的变量,但第二个函数也调用第一个函数

Javascript 第一个函数使用第二个函数中的变量,但第二个函数也调用第一个函数,javascript,function,invoke,Javascript,Function,Invoke,我有这段JavaScript代码,我希望它能够在第二个函数中使用calculate()(这确实有效),但问题是第一个函数使用了在第二个函数中声明的变量。此外,我需要仅在调用chemicalclc时执行var first=prompt function calculate(){ var calctrans=parseInt(firsttrans, 10) return calctrans; } function chemicalcalc(){ var first=prompt("En

我有这段JavaScript代码,我希望它能够在第二个函数中使用
calculate()
(这确实有效),但问题是第一个函数使用了在第二个函数中声明的变量。此外,我需要仅在调用
chemicalclc
时执行
var first=prompt

function calculate(){
  var calctrans=parseInt(firsttrans, 10)
  return calctrans;
}

function chemicalcalc(){
  var first=prompt("Enter first term\nLeave bank to go back to element finder");
  if(first==""){
    calculate();
  }else{
    var firsttrans=first.replace("h", 1);
  }
}

chemicalcalc();

通过将
calculate()
嵌套在
chemicalcalc
中,您可以允许
calculate
访问父函数的作用域

但是,如果用户没有输入任何内容,只是在提示下按enter键,您的代码将调用
计算
,然后尝试使用
firsttrans
,因为没有输入设置值的
if
的分支,因此出现逻辑错误。

我删除了
if/then
逻辑,以显示函数的其余部分将如何工作

函数chemicalcalc(){
var first=提示(“输入第一项\n离开银行返回元素查找器”);
var firsttrans=第一个。替换(“h”,1);
//调用calculate并返回它返回的任何内容
返回计算();
//嵌套函数始终可以访问父函数的作用域
函数计算(){
var calctrans=parseInt(第一次传输,10)
返回计算器;
}
}

console.log(chemicalcalc())为什么首先需要将firsttrans传递给calculate()?如果first是一个空字符串,您会说您想调用calculate(),但是根据您当前的代码,声明一个单独的firsttrans变量的全部目的是用first中的1替换所有的h,那么在您已经这样做之后调用calculate()是否有意义,或者,如果first是空字符串,可能会中断函数/执行其他操作?即使您可以访问
firsttrans
,也不会对其进行定义,因为在调用
calculate
时未为其指定值。它只在
else
部分中给出一个值,您不调用
calculate
。另外,您没有对
calculate
返回的值执行任何操作。。。所以,也许你可以解释你想要发生什么。这似乎是有道理的,但当我尝试输入“h”后,什么都没发生?可能是因为calculate()的调用超出了定义它的范围吗?@KrazyKoder22我不知道你的意思。当我运行这个并输入时,比如说“h23”,我得到了“123”输出。好的,它现在工作了。有时,当我将一个函数嵌套在另一个函数中时,ide会告诉我将嵌套函数移动到函数体根。为什么这段代码不这么说?@KrazyKoder22嵌套函数在JavaScript中是完全正常的,而且通常是可取的。当IDE确定嵌套函数不依赖父函数的作用域时,它会告诉您“取消”嵌套函数。这里不是这种情况,嵌套函数确实依赖于父函数的作用域,因此嵌套是有保证的。这就是为什么它没有抱怨。