为什么在Javascript中变量在函数之前声明

为什么在Javascript中变量在函数之前声明,javascript,global-variables,calculator,Javascript,Global Variables,Calculator,我在网上寻找计算器代码,我发现了如下代码 但我心里有个问题。为什么程序员在创建函数之前声明变量 var getValues= ""; function updateField(val) { getValues += val; document.calc.putValues.value = getValues; } 请帮我回答我的问题 谢谢大家。他所做的是将变量移出函数的范围 这将使相同范围内的其他方法可以访问相同的变量 查看此问题以了解有关变量作用域的更多信息:他所做的是将变

我在网上寻找计算器代码,我发现了如下代码

但我心里有个问题。为什么程序员在创建函数之前声明变量

var getValues= "";

function updateField(val) {
    getValues += val;
    document.calc.putValues.value = getValues;
}
请帮我回答我的问题


谢谢大家。

他所做的是将变量移出函数的范围

这将使相同范围内的其他方法可以访问相同的变量


查看此问题以了解有关变量作用域的更多信息:

他所做的是将变量移出函数的作用域

这将使相同范围内的其他方法可以访问相同的变量


查看此问题以了解有关变量范围的更多信息:

这样,它是一个通过函数调用保持其值的全局变量。
如果将它放在函数中,则调用函数时它将始终为0,这样,它是一个全局变量,通过函数调用保持其值。
如果将它放在函数中,调用函数时它将始终为0。您知道,变量实际上可以在函数下声明。但必须在使用之前声明它,也就是说在调用函数之前

我创建了一个测试场景来说明我的意思

我创建了一个名为
test.html
的文本文件,其中包含以下简单内容:

<script type="text/javascript">
var a = "hello"; // <- the declaration of the variable before the function
function b(){ // <- the actual function
  a += " world";
  alert(a);
}
b(); // <- and here it is called
</script>
结果是一样的:
helloworld
但是当我把声明放在电话下面的时候,就像这样:

<script type="text/javascript">
function b(){ // <- the actual function
  a += " world";
  alert(a);
}
b(); // <- and here it is called
var a = "hello"; // <- the declaration of the variable under the call
</script>
结果是:
NaN
意思是
不是一个数字


这就是JS的懒惰和宽容。当然,你的问题也可以解释为变量和函数的范围。但对于这一点,已经有两个答案。当然,如果它们还不够,我也可以在这里编辑一个详细的解释。

你知道,变量实际上可以在函数下声明。但必须在使用之前声明它,也就是说在调用函数之前

我创建了一个测试场景来说明我的意思

我创建了一个名为
test.html
的文本文件,其中包含以下简单内容:

<script type="text/javascript">
var a = "hello"; // <- the declaration of the variable before the function
function b(){ // <- the actual function
  a += " world";
  alert(a);
}
b(); // <- and here it is called
</script>
结果是一样的:
helloworld
但是当我把声明放在电话下面的时候,就像这样:

<script type="text/javascript">
function b(){ // <- the actual function
  a += " world";
  alert(a);
}
b(); // <- and here it is called
var a = "hello"; // <- the declaration of the variable under the call
</script>
结果是:
NaN
意思是
不是一个数字


这就是JS的懒惰和宽容。当然,你的问题也可以解释为变量和函数的范围。但对于这一点,已经有两个答案。当然,如果它们还不够,我也可以在这里编辑一个详细的解释。

getValues不会“调用函数时总是为零”。它是一个全局变量,在调用函数之前被赋值为“”(空字符串)。如果调用该函数,它将具有该函数分配给它的任何值。因此,它只有在上次调用函数时才被赋值为零。我试图解释,如果它在函数内部,那么它将始终为空,它不会通过不同的调用保持其值,并且不能在其他函数中使用。@RobG
code
var getValues=“”;函数updateField(val){getValues+=val;document.calc.putValues.value=getValues;}我还可以像
code
var getValues这样分配变量;为什么我要给它赋值emptygetValues不会“调用函数时总是为零”,这不是很好吗。它是一个全局变量,在调用函数之前被赋值为“”(空字符串)。如果调用该函数,它将具有该函数分配给它的任何值。因此,它只有在上次调用函数时才被赋值为零。我试图解释,如果它在函数内部,那么它将始终为空,它不会通过不同的调用保持其值,并且不能在其他函数中使用。@RobG
code
var getValues=“”;函数updateField(val){getValues+=val;document.calc.putValues.value=getValues;}我还可以像
code
var getValues这样分配变量;这不好吗?为什么我要把它分配给空的?非常感谢你。我真的很感谢你的帮助。再次感谢,非常感谢。我真的很感谢你的帮助。再次感谢,非常感谢。现在我正在阅读你给我的链接,它对我很有帮助。非常感谢你。现在我正在阅读你给我的链接,它对我很有帮助。