我在Javascript的numPrinter函数中放置了一个全局变量。
但是如果我在放console.log(i);
之前不放numPrinter();
它a global variable
.. global
..而且我不明白global variable
在numPrinter()
之后是如何工作的
numPrinter();
内没有return i;
var numPrinter = function(){
i = 30;
};
console.log(i); // ReferenceError: i is not defined
numPrinter();
console.log(i); // 30
想象一下,你是 JavaScript 引擎,从上到下阅读这段代码:
- 我们读到的第一件事是
numPrinter
函数。不存在()
,因此仅定义numPrinter
而不调用。 - 继续向下,读取第一个
console.log(i);
。在此处调用它会导致ReferenceError: i is not defined
,因为numPrinter
尚未调用i
因此尚无法访问。 - 再往下,我们会遇到
numPrinter();
在这里,JS 引擎读取()
并调用numPrinter
函数。我们现在可以访问i
因为未声明的变量总是变成全局变量。 - 最后,读取第二个
console.log(i);
并打印出30
的结果,因为i
可以在numPrinter
函数之外全局访问。
默认情况下,
js 中的变量是全局的,所以如果你像这样写 smth:
let i = 30
在您的函数中,它将是本地的