从基础学起
var num = 1;
var num;
console.log(num)
为毛还是显示1,按照我的理解不是应该重新被定义了吗?不是应该是undefinde吗?
第一行定义了一个变量num,保存在内存栈中,名称是num,值是1。
第二行又定义了一个变量num,上面一行的num名称被清空了,继续在内存栈中新建一行num,没有值!
所以,不是应为
从基础学起
var num = 1;
var num;
console.log(num)
为毛还是显示1,按照我的理解不是应该重新被定义了吗?不是应该是undefinde吗?
第一行定义了一个变量num,保存在内存栈中,名称是num,值是1。
第二行又定义了一个变量num,上面一行的num名称被清空了,继续在内存栈中新建一行num,没有值!
所以,不是应为
问的太高大上了,这个和堆栈没关系。var num
就是单纯的声明,而且是没有就声明,已经有了那就当什么都没发生,所以现在提倡用let/const而不再使用var。
一句话:并不是var num
等价于var num = undefined
。
所以楼上说的变量提升也不完全对,因为在控制台逐行执行也是一样的结果。
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
js 有变量提升,你的代码相当于
还有,不要使用 var 了,var 有很多缺点