代码如下
var a = 1; function demo() { console.log(a); //undefined var a = 2; console.log(a); // 2 } demo();
为什么第一个是 undefined 第二个是 2 ?
学习是最好的投资!
因为这一句:
var a = 2;
JavaScript 函数里的 var 声明执行时会被提升到函数的顶端,也就是说最终执行的代码不是:
var
console.log(a); var a; a = 2;
而是:
var a; // 这里的声明将外部作用域中的 a 声明覆盖掉了 console.log(a); // undefined a = 2;
把那个 var 去掉就正常了。
文档:var hoisting
你的代码等价于这个
var a = 1; function demo() { var a = undefined; console.log(a); //undefined a = 2; console.log(a); // 2 } demo();
因为demo里面也定义了a啊……变量声明语句会先执行……
因为第二个函数会先从局部作用哉开始查找。
可以这么解释,因为js有个预编译的过程,会把变量声明和函数声明提前到当前上下文的最前面。
因为这一句:
JavaScript 函数里的
var
声明执行时会被提升到函数的顶端,也就是说最终执行的代码不是:而是:
把那个
var
去掉就正常了。文档:var hoisting
你的代码等价于这个
因为demo里面也定义了a啊……变量声明语句会先执行……
因为第二个函数会先从局部作用哉开始查找。
可以这么解释,因为js有个预编译的过程,会把变量声明和函数声明提前到当前上下文的最前面。