javascript - 如何在 JavaScript 中使用另一个函数中的变量而不将该变量设置为全局变量?

标签 javascript html forms

本质上,我有两个不同的函数根据 HTML 表单输入执行不同的计算。

我需要第三个函数来从每个函数中获取一个变量来执行最后的数学计算。

有没有什么方法可以在不使变量全局化或组合函数的情况下做到这一点?

以下是函数:

function getStateTax(){
    var income = salaryBox.value;
    var sel = document.getElementById("state");
    var state = sel.options[sel.selectedIndex].value;
    var rate = taxRates[state];
    var el = document.getElementById("rate");
    el.innerHTML = rate;
    stateTaxElement.innerHTML = "Your state tax amount is: $" + Math.round(((income * (1 + rate)) - income) * 100) / 100;
}

function getFedTax() {
    var fedTax = 0;
    var income = salaryBox.value;
    if (document.getElementById("single").checked) {
        if (income <= 8350) {
            fedTax = income * .10;
        } else if (income <= 33950) {
            fedTax = 8350 * 0.10 + (income - 8350) * 0.15;
        } else if (income <= 82250) {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (income - 33950) * 0.25;
        } else if (income <= 171550) {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (82250 - 33950) * 0.25 + (income - 82250) * 0.28;
        } else if (income <= 372950) {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (82250 - 33950) * 0.25 + (171550 - 82250) * 0.28 + (income - 171550) * 0.33;
        } else {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (82250 - 33950) * 0.25 + (171550 - 82250) * 0.28 + (372950 - 171550) * 0.33 + (income - 372950) * 0.35;
        }
    }
    if (document.getElementById("jointorwidow").checked) {
        if (income <= 16700) {
            fedTax = income * 0.10;
        } else if (income <= 67900) {
            fedTax = 16700 * 0.10 + (income - 16700) * 0.15;
        } else if (income <= 137050) {
            fedTax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (income - 137050) * 0.25;
        } else if (income <= 208850) {
            fedTax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (137050 - 67900) * 0.25 + (income - 137050) * 0.28;
        } else if (income <= 372950) {
            fedTax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (137050 - 67900) * 0.25 + (208850 - 137050) * 0.28 + (income - 208850) * 0.33;
        } else {
            fedTax = 16700 * 0.10 + (67900 - 16700) * 0.15 + (137050 - 67900) * 0.25 + (208850 - 137050) * 0.28 + (372950 - 208850) * 0.33 + (income - 372950) * 0.35;
        } 
    }
    if (document.getElementById("separate").checked) {
        if (income <= 8350) {
            fedTax = income * 0.10;
        } else if (income <= 33950) {
            fedTax = 8350 * 0.10 + (income - 8350) * 0.15;
        } else if (income <= 68525) {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (income - 33950) * 0.25;
        } else if (income <= 104425) {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (68525 - 33950) * 0.25 + (income - 68525) * 0.28;
        } else if (income <= 186475) {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (68525 - 33950) * 0.25 + (104425 - 68525) * 0.28 + (income - 104425) * 0.33;
        } else {
            fedTax = 8350 * 0.10 + (33950 - 8350) * 0.15 + (68525 - 33950) * 0.25 + (104425 - 68525) * 0.28 + (186475 - 104425) * 0.33 + (income - 186475) * 0.35;
        }
    }  
    if (document.getElementById("head").checked) {
        if (income <= 11950) {
            fedTax = income * 0.10;
        } else if (income <= 45500) {
            fedTax = 11950 * 0.10 + (income - 11950) * 0.15;
        } else if (income <= 117450) {
            fedTax = 11950 * 0.10 + (45500 - 11950) * 0.15 + (income - 45500) * 0.25;
        } else if (income <= 190200) {
            fedTax = 11950 * 0.10 + (45500 - 11950) * 0.15 + (117450 - 45500) * 0.25 + (income - 117450) * 0.28;
        } else if (income <= 372950) {
            fedTax = 11950 * 0.10 + (45500 - 11950) * 0.15 + (117450 - 45500) * 0.25 + (190200 - 117450) * 0.28 + (income - 190200) * 0.33;
        } else {
            fedTax = 11950 * 0.10 + (45500 - 11950) * 0.15 + (117450 - 45500) * 0.25 + (190200 - 117450) * 0.28 + (372950 - 190200) * 0.33 + (income - 372950) * 0.35;
        }
    }
    fedTaxElement.innerHTML = "Your federal tax amount is: $" + Math.round(fedTax * 100) / 100;
}

我需要做的是创建第三个函数,将 fedTax 和第一个收入变量加在一起,然后从新变量中减去它们。

最佳答案

JavaScript 中的函数具有返回值的能力(正如它们在大多数(如果不是全部)编程语言中所做的那样)。

这意味着当函数执行完毕后,您可以返回一个特定值。

返回结果的一个简单示例是一个简单的 add 函数:

var add = function(a, b) {
    return a + b;
}

var result = add(20, 30); // result is 50
console.log(result);

当然,这是一个糟糕的例子,因为有 + 运算符允许您添加数字或连接字符串,但它仍然显示了 return 的作用。

如果您将该行中的 return a + b; 替换为 a + b;,则不会返回任何值。

现在假设我们有一个带有 3 个参数的函数,前两个参数将相互相加,第三个参数将从结果中减去。

我们可以使用嵌套在函数中的 add 方法来返回我们可以继续计算的结果。

这个函数看起来像这样:

var custom_calc = function(a, b, c) {
    var add_res = add(a, b);
    return (add_res - c);
}

var result = custom_calc(10, 20, 20); // result is 10
console.log(result);

因此,在前两个函数中,您希望每个函数的最后一行是一个 return 语句,返回第三个函数中所需的变量。在我的示例中,我们使用 add 获取结果,将其存储在变量中,然后使用该变量进行进一步计算,然后返回结果。

这同样适用于你的情况,祝你好运!

关于javascript - 如何在 JavaScript 中使用另一个函数中的变量而不将该变量设置为全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33935095/

相关文章:

javascript - 将 .js 文件包含在 alfresco 中的另一个 javascript 文件中

javascript - 如何转义 javascript 's "\"

javascript - 排除预加载的元素

javascript - 获取选定的 li 文本并使用它设置菜单的文本

c# - 返回上一个表单 (c#)

javascript - html 中调用 onsubmit 的位置

javascript - 如何获取ajax表单提交返回值

javascript - 使用 HTML slider 更改按钮的链接

javascript - 使用窗口大小调整背景图像大小

html - 指定初始大小的流体图像