var声明提前的问题

alert(a);
var a=3;
按照变量提升我的理解是
var a;
alert(a);
a = 3;
这么理解就是undefined,但是结果是3,该怎么理解

备注补充:找到原因了,是因为执行了好几次,第一次执行确实是undefined,但是我执行了好几次,后面再执行的时候由于已经赋值了,所以导致都变成3,谢谢各位大侠

阅读 2.7k
4 个回答

首先chrome浏览器端试验了一下是undefined,并不是3,其次换用console.log在浏览器中和node环境中尝试,结果也是打印undefined。


补充一句如果是使用了let,那么就会形成死区,在node环境下会报错。

console.log(a);
let a = 3;

亲 你的理解是正确的 运行结果也是undefined 不是3

js 执行之前会先生成一个作用域上下文其中只会定义var 的变量 参数 和function,所以var a; a的值此时是undefined,而后执行的时候 先执行了alert ,在执行赋值为3.
所以: 正解应该是alert出来的值就是undefined.

alert(a);
var a=3;

var a;
alert(a);
a = 3;

如果你是按照你提问的顺序输入到chrome中的话,确实是第一个是undefined,第二是3,因为你在第一个已经对a赋值了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题