我有这段JavaScript代码,我希望它能够在第二个函数中使用calculate()
(它确实有用),但问题是第一个函数使用了第二个函数中声明的变量功能。此外,我只需要在调用var first=prompt
时执行chemicalcalc
。
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();
答案 0 :(得分:0)
通过将calculate()
嵌套在chemicalcalc
内,允许calculate
访问父函数的范围。
但是,如果用户没有输入任何内容并且只是在提示符下点击ENTER,那么您的代码将调用calculate
,然后会尝试使用firsttrans
,而不会有一个值,因为没有输入设置值的if
的分支,所以你有一个逻辑错误。
我删除了if/then
逻辑,以显示函数的其余部分如何工作。
function chemicalcalc(){
var first = prompt("Enter first term\nLeave bank to go back to element finder");
var firsttrans = first.replace("h", 1);
// Invoke calculate and return whatever it returns
return calculate();
// Nested functions always have access to the parent's scope
function calculate(){
var calctrans = parseInt(firsttrans, 10)
return calctrans;
}
}
console.log(chemicalcalc());
另一个选项(而不是嵌套函数)是简单地将第二个函数传递给它所需的数据作为参数:
function chemicalcalc(){
var first = prompt("Enter first term\nLeave bank to go back to element finder");
var firsttrans = first.replace("h", 1);
// Invoke calculate and pass it the data it needs, then return whatever it returns
return calculate(firsttrans);
}
// Now the function expects data to be passed by the caller
function calculate(data){
var calctrans = parseInt(data, 10)
return calctrans;
}
console.log(chemicalcalc());