考虑以下代码:
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 )
发布于 2013-11-28 10:41:57
function foo(a)
{
console.log(a+b);
var b = 0;
}实际上,JavaScript看到了如下内容:
function foo(a)
{
var b;
console.log(a+b);
b = 0;
}这称为变量http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html,当您在JavaScript中声明一个变量时,声明被悬挂到声明函数的顶部,并且赋值发生在原始位置。
https://stackoverflow.com/questions/20263819
复制相似问题