Javascript 我的局部变量没有更新全局变量?

Javascript 我的局部变量没有更新全局变量?,javascript,math,Javascript,Math,我有一个全局变量号,所以它得到一个传递给函数的过程,但当它完成时,它假设在函数内部更改该变量,然后在外部传递给全局变量以进行更新。因此,它继续使用旧的全局变量,而其他一切都在更新并变得更大 var P_Level = 1 var E_Level = 1 var P_Current = 0 var P_Max = 100 function P_EXP_Gain(exp) { console.log('P_Max1 is '+P_Max) console.log('P_Cur

我有一个全局变量号,所以它得到一个传递给函数的过程,但当它完成时,它假设在函数内部更改该变量,然后在外部传递给全局变量以进行更新。因此,它继续使用旧的全局变量,而其他一切都在更新并变得更大

var P_Level = 1

var E_Level = 1

var P_Current = 0

var P_Max = 100

function P_EXP_Gain(exp) {
    console.log('P_Max1 is '+P_Max)
    console.log('P_Current1 is '+P_Current)
    console.log('P_Level1 is '+P_Level)
    console.log("")
    if (exp == undefined || null) {
        P_Current = (E_Level * 20) + P_Current
        P_Max = P_Max
        P_Experience(P_Current, P_Max)
    }
    else {
        P_Current = ((E_Level * 20) + exp) + P_Current
        P_Max = P_Max
        console.log('P_Max2 is '+P_Max)
        console.log('P_Current2 is '+P_Current)
        console.log('P_Level2 is '+P_Level)
        console.log("")
        P_Experience(P_Current, P_Max)
    }
}

function P_Experience(P_Current, P_Max) {
    while (P_Current >= P_Max) {
        P_Level++ // There is a hidden error that causes one to gain perm level up every time they level up via normal way.
        P_Current = P_Current - P_Max
        P_Max = P_Level * 100
        console.log("")
        console.log('P_Max3 is '+P_Max)
        console.log('P_Current3 is '+P_Current)
        console.log('P_Level3 is '+P_Level)
        console.log("")
        alert('Level Up')
    }
}

P_EXP_Gain(80)
P_EXP_Gain(80) // notice that current random get extra 100
P_EXP_Gain(80)
您可以通过console.log看到,在while loop之前,它的p_Max始终为100,但在此之后,它会正确更改,但该更改永远不会更新为全局p_Max。我还注意到,在第一次p_EXP_增益之后,在考虑增益之前,函数的第一部分p_电流将增加100。我不明白为什么会发生这种事。我的数学有什么地方错了吗


p_Experience函数的参数名为p_Current和p_Max,这将覆盖函数中的全局范围。最简单的解决方案是重命名参数

我认为您的函数使用传递到函数中的参数,而不是全局变量。您可以重命名参数,它应该可以工作

function P_Experience(P_Current_param, P_Max_param) {
    while (P_Current >= P_Max) {
        P_Level++ // There is a hidden error that causes one to gain perm level up every time they level up via normal way.
        P_Current = P_Current - P_Max
        P_Max = P_Level * 100
        console.log("")
        console.log('P_Max3 is '+P_Max)
        console.log('P_Current3 is '+P_Current)
        console.log('P_Level3 is '+P_Level)
        console.log("")
        alert('Level Up')
    }

如果你绝对需要这些参数,也许会这样。如果不需要全局变量,只需在函数中使用全局变量,而无需将它们传入

什么?我以为它应该把东西传递到其他地方,所以我为什么要首先使用它?在函数名中使用这些参数是错误的吗?因为您试图修改全局范围,所以不需要命名与全局范围中的参数匹配的变量,因为局部范围总是覆盖全局范围。如果您不了解,您可以阅读更多关于Javascript范围的内容,我看到了,所以参数将作为自己的名称而不是镜像全局,我看到了,谢谢您提供这些信息。我查看了本地和全局范围,但没有回忆起任何有关参数的内容。我在局部范围内没有变量声明,但是这些参数是从P_EXP_Gain传递到P_Experience函数的,而P_EXP_Gain是从全局?否?不需要将它们传递给函数,因为它们是全局变量。将它们传递给函数会将它们更改为parametersI see,因此只有将一个函数中的局部变量传递给另一个函数时才有用,因为该函数可能无法在第一个函数中看到变量声明,因为范围正确吗?