Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么函数中的javascript全局变量显示错误?_Javascript_Global Variables - Fatal编程技术网

为什么函数中的javascript全局变量显示错误?

为什么函数中的javascript全局变量显示错误?,javascript,global-variables,Javascript,Global Variables,我在Javascript中的numPrinter函数中放置了一个全局变量。 但如果我不把numPrinter;在放入console.logi之前 它是一个全局变量。。全球的 而且我也不明白numPrinter之后全局变量是如何工作的 我一去不复返;在numPrinter内 默认情况下,js中的变量是全局变量,因此如果您编写smth,如: let i = 30 在您的函数中,它将是本地的想象您是JavaScript引擎,自上而下地读取以下代码: 我们首先读到的是numPrinter函数。不存

我在Javascript中的numPrinter函数中放置了一个全局变量。 但如果我不把numPrinter;在放入console.logi之前

它是一个全局变量。。全球的 而且我也不明白numPrinter之后全局变量是如何工作的

我一去不复返;在numPrinter内


默认情况下,js中的变量是全局变量,因此如果您编写smth,如:

let i = 30

在您的函数中,它将是本地的

想象您是JavaScript引擎,自上而下地读取以下代码:

我们首先读到的是numPrinter函数。不存在,因此只定义了numPrinter,而不调用它。 继续向下,第一个console.logi;是读的。在这里调用它会导致ReferenceError:我没有定义,因为numPrinter还没有被调用,所以我还不能被访问。 再往下走,我们遇到了numPrinter;在这里,JS引擎读取并调用numPrinter函数。我们现在可以访问i,因为未声明的变量总是成为全局变量。 最后,第二个console.logi;读取并打印30的结果,因为i在numPrinter函数之外是全局可访问的。
看起来你没有在任何地方用var或let声明i,所以当你在numPrinter中只说i=30时,它神奇地将i声明为一个全局变量,并将其设置为30。这是Javascript的一个奇怪的怪癖,通常只会导致问题,您可以通过使用严格模式来避免它。因此,第一次记录i时,变量没有在任何可访问的范围内声明,因此引用错误-然后numPrinter神奇地创建全局i并将其设置为30。@RobinZigmond谢谢。但是我不明白numPrinter是如何创建全局iAs的,我很难过,这是一个很糟糕的特性!不在严格模式下运行时的Javascript。我不确定还能说多少,但这里有一个指向MDN的链接,其中第3段提到:
let i = 30