下面的javascript函数中未定义全局变量

下面的javascript函数中未定义全局变量,javascript,parsing,variables,scope,Javascript,Parsing,Variables,Scope,我有一些代码基本上是这样的: TestFunction(); const pi = 3.14; function TestFunction() { alert("pi="+pi); } 代码失败,因为未定义“pi”。我搔了很长一段时间的头,但后来意识到代码不是线性解析的。调用函数时,解析了函数“TestFunction”,但尚未解析常量 这发生在Safari和Chrome上。我不知道是否所有浏览器都会以相同的方式解析。它可能适用于某些情况。在第一次调用函数之前移动常量的定义解决了问题

我有一些代码基本上是这样的:

TestFunction();
const pi = 3.14;

function TestFunction()
{
    alert("pi="+pi);
}
代码失败,因为未定义“pi”。我搔了很长一段时间的头,但后来意识到代码不是线性解析的。调用函数时,解析了函数“TestFunction”,但尚未解析常量


这发生在Safari和Chrome上。我不知道是否所有浏览器都会以相同的方式解析。它可能适用于某些情况。

在第一次调用函数之前移动常量的定义解决了问题

const pi = 3.14;

TestFunction();

function TestFunction()
{
    alert("pi="+pi);
}

const
let
声明与
var
function
声明不同。常量已被解析,但在您执行语句之前它不会被赋值。我想我是被自己的petard“提升”的。@4castle它实际上与
var
一样。声明被解析,因此变量的作用域是已知的,但初始化直到您执行该语句才会发生。var和const也会发生完全相同的行为。