首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript函数范围

JavaScript函数范围
EN

Stack Overflow用户
提问于 2013-11-12 12:39:59
回答 2查看 2.1K关注 0票数 2

我有疑问,关于JavaScript的范围:-

代码语言:javascript
运行
复制
var a = 10;
function show() {
   alert(a);
   var a = 20;
   alert(a);
}
show();
alert(a);

上面给出的输出为“未定义”20 10

我理解了最后两个输出,但是为什么在第一个警报中没有定义,我将结果解释为10,20,10,因为它是一个脚本,它会逐行运行,所以当第一个警报遇到时,它会处理全局的,用10警告我,但是所有这些理论都出错了。

请你解释一下,实际的理论是什么,我哪里出错了?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 12:53:51

吊装:一个分散的vars问题

JavaScript使您可以在一个函数中的任何地方拥有多个var语句,它们的作用都好像变量都是在函数的顶部声明的。这种行为被称为提升。当您使用一个变量,然后在函数中进一步声明它时,这会导致逻辑错误。对于JavaScript,只要变量位于相同的作用域(相同的函数),它就被认为是声明的,即使在var声明之前使用它时也是如此。看一下这个例子:

代码语言:javascript
运行
复制
myname = "global"; // global variable
function func() {
  alert(myname); // "undefined"
  var myname = "local";
  alert(myname); // "local"
}
func();

在本例中,您可能期望第一个警报()将提示“全局”,第二个提示将提示“本地”。这是一个合理的期望,因为在发出第一次警报时,我的名称没有声明,因此函数可能会“查看”全局myname。但这不是它的工作方式。第一个警报会说“未定义”,因为我的名字被视为函数的局部变量。(尽管声明是在之后发布的。)所有变量声明都被悬挂到函数的顶部。因此,为了避免这种混淆,最好提前声明您打算使用的所有变量。

前面的代码段将表现得好像它是这样实现的:

代码语言:javascript
运行
复制
myname = "global"; // global variable
function func() {
  var myname; // same as -> var myname = undefined;
  alert(myname); // "undefined"
  myname = "local";
  alert(myname); // "local"
}
func();
票数 6
EN

Stack Overflow用户

发布于 2013-11-12 12:53:21

查找变量提升,变量定义得到提升初始化不。

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

https://stackoverflow.com/questions/19929461

复制
相关文章

相似问题

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