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

时间:2019-01-19 14:44:35

标签: javascript global-variables

我在Javascript的numPrinter函数中放入了一个全局变量。
但是如果我在放numPrinter();之前不放console.log(i);


它是a global variable .. global .. 而且我不理解global variable之后numPrinter()的工作方式

return i;中没有numPrinter();

var numPrinter = function(){

    i = 30;
};

console.log(i);  // ReferenceError: i is not defined

numPrinter();
console.log(i);  // 30

2 个答案:

答案 0 :(得分:1)

假设您是JavaScript引擎,请从上至下读取以下代码:

  1. 我们首先读到的是numPrinter函数。目前没有(),因此numPrinter仅被定义但未被调用。
  2. 继续向下,读取第一个console.log(i);。在这里调用它会导致ReferenceError: i is not defined,因为numPrinter尚未被调用,因此i仍无法访问。
  3. 再往下,我们遇到numPrinter();,在这里,JS引擎读取()并调用numPrinter函数。现在,我们可以访问i,因为未声明的变量始终成为全局变量。
  4. 最后,因为console.log(i);30函数之外是全局可访问的,因此第二个i会被读取并打印出numPrinter的结果。

答案 1 :(得分:-1)

由于js中的默认变量是全局变量,因此如果您将smth编写为:

let i = 30

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