javascript 变量作用域


代码如下


 var a = 1;

function demo() {

   console.log(a); //undefined

   var a = 2;

   console.log(a); // 2

}

demo();

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

HTML JavaScript

天心阁吴克 10 years, 12 months ago

可以这么解释,因为js有个预编译的过程,会把变量声明和函数声明提前到当前上下文的最前面。

法克约瑟夫 answered 10 years, 12 months ago

因为第二个函数会先从局部作用哉开始查找。

超电磁兄贵 answered 10 years, 12 months ago

因为demo里面也定义了a啊……变量声明语句会先执行……

GalFun answered 10 years, 12 months ago

你的代码等价于这个


 var a = 1;

function demo() {

   var a = undefined;

   console.log(a); //undefined

   a = 2;

   console.log(a); // 2

}

demo();

神SHENG answered 10 years, 12 months ago

因为这一句:


 var a = 2;

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


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

而是:


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

把那个 var 去掉就正常了。


文档:var hoisting

大宝SOD蜜 answered 10 years, 12 months ago

Your Answer