问一个关于堆栈的简单问题

从基础学起
var num = 1;
var num;
console.log(num)

为毛还是显示1,按照我的理解不是应该重新被定义了吗?不是应该是undefinde吗?
第一行定义了一个变量num,保存在内存栈中,名称是num,值是1。
第二行又定义了一个变量num,上面一行的num名称被清空了,继续在内存栈中新建一行num,没有值!
所以,不是应为

阅读 1.3k
2 个回答

js 有变量提升,你的代码相当于

var num;
var num;
num = 1;

还有,不要使用 var 了,var 有很多缺点

问的太高大上了,这个和堆栈没关系。
var num就是单纯的声明,而且是没有就声明,已经有了那就当什么都没发生,所以现在提倡用let/const而不再使用var。
一句话:并不是var num等价于var num = undefined
所以楼上说的变量提升也不完全对,因为在控制台逐行执行也是一样的结果。

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