Javascript 第一个函数使用第二个函数中的变量,但第二个函数也调用第一个函数
我有这段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
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确定嵌套函数不依赖父函数的作用域时,它会告诉您“取消”嵌套函数。这里不是这种情况,嵌套函数确实依赖于父函数的作用域,因此嵌套是有保证的。这就是为什么它没有抱怨。