javascript引擎:变量存在

javascript engine: variable existance

本文关键字:存在 变量 引擎 javascript      更新时间:2023-11-18

考虑以下代码:

function foo(a)
{
   console.log(a+b);
}
foo(2);

将导致引用错误,因为没有定义b。

现在考虑一下:

function foo(a)
{
   console.log(a+b);
   var b = 0;
}
foo(2);

这里的结果是NaN。所以javascript知道b存在,但它还没有值。

问题是:如何从JS引擎的角度来解释这一点?简单地说,看起来JS引擎首先声明一个范围中的所有变量,但只在需要时为其赋值。有人对此有更科学的文章吗?

我清楚地了解发生了什么,我只想知道它背后的原因(为什么引擎在使用它之前知道b

function foo(a)
{
   console.log(a+b);
   var b = 0;
}

JavaScript实际上如下所示:

function foo(a)
{
   var b;
   console.log(a+b);
   b = 0;
}

这被称为variableRighting,当您在JavaScript中声明一个变量时,声明被提升到声明函数的顶部,赋值在原始位置进行。