javascript引擎:变量存在
javascript engine: variable existance
考虑以下代码:
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中声明一个变量时,声明被提升到声明函数的顶部,赋值在原始位置进行。
相关文章:
- 为什么不允许值为0的变量询问是否存在
- AngularJS中存在与$scope变量相关的问题.UI中的值未更改
- 测试变量存在性的Javascript多重赋值:var obj=obj||{}
- 通过字符串形式的名称检查变量是否存在于本地作用域内
- 检查全局变量是否存在的正确方法是什么
- 验证JavaScript中是否存在变量
- javascript引擎:变量存在
- 如何将用户会话保存在PHP中的一个变量中,以便在JavaScript中引用
- 简写 if/else 变量存在
- 流星:如何避免检查到处是否存在变量或属性
- 等到元素存在,循环,然后存储在变量中
- 我的变量保存在 URL/位置中,如何从另一个页面读取它
- 处理 JavaScript 中不存在的变量
- q 从 .then 函数分配给更高级别的作用域变量是否存在任何陷阱
- 将 Json 保存在 Javascript 变量中
- 将页面源代码保存在 Javascript 变量中
- 使用 javascript 检查 html 表中是否存在变量
- 做一个“;不存在变量“;评估到“;未定义的“;非严格代码中的值
- Node.js检测用户访问的每个页面的req中是否存在变量
- 检查localStorage中是否存在变量的值