首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript引擎:变量存在

javascript引擎:变量存在
EN

Stack Overflow用户
提问于 2013-11-28 10:40:20
回答 1查看 44关注 0票数 1

考虑以下代码:

代码语言:javascript
运行
复制
function foo(a)
{
   console.log(a+b);
}
foo(2);

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

现在考虑这一点:

代码语言:javascript
运行
复制
function foo(a)
{
   console.log(a+b);
   var b = 0;
}
foo(2);

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

问题:如何从JS引擎的角度来解释这一点?简单地说,它看起来像是JS引擎首先声明了作用域中的所有变量,但只有在需要时才为它分配值。有人在这方面有一篇更科学的文章吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-28 10:41:57

代码语言:javascript
运行
复制
function foo(a)
{
   console.log(a+b);
   var b = 0;
}

实际上,JavaScript看到了如下内容:

代码语言:javascript
运行
复制
function foo(a)
{
   var b;
   console.log(a+b);
   b = 0;
}

这称为变量http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html,当您在JavaScript中声明一个变量时,声明被悬挂到声明函数的顶部,并且赋值发生在原始位置。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20263819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档