开发者社区> 问答> 正文

javascript 变量作用域

代码如下

var a = 1;

function demo() {

   console.log(a); //undefined

   var a = 2;

   console.log(a); // 2

}

demo();

为什么第一个是 undefined 第二个是 2 ?

展开
收起
杨冬芳 2016-06-15 18:39:48 2267 0
1 条回答
写回答
取消 提交回答
  • IT从业

    因为这一句:

    var a = 2;

    JavaScript 函数里的 var 声明执行时会被提升到函数的顶端,也就是说最终执行的代码不是:

    console.log(a);
    var a;
    a = 2;

    而是:

    var a; // 这里的声明将外部作用域中的 a 声明覆盖掉了
    console.log(a); // undefined
    a = 2;

    把那个 var 去掉就正常了。

    2019-07-17 19:40:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载