扫码关注官方订阅号
var a = 0; function test(){ alert(a); if(false){ var a = 100; } } test();
为什么alert(undefind);而不是alert 0
alert(undefind);
alert 0
闭关修行中......
js变量提升,等价于下面这样
var a = 0; function test(){ var a; alert(a); if(false){ a = 100; } } test();
对,是变量提升的原因,另外,js查找变量是先查找当前作用域在查找父级作用域的,先查找到test里有a的声明,就停止查找了,所以就是undefined
在es5中并不存在块级作用域,因而
alert(a); if(false){ var a = 100; }
即便没有进入if判断,但是 var a实际上与alert(a)实在同一个作用域。 在同一个作用域内通过var声明变量存在变量提升。
如果我么稍微改一下,
alert(a); if(false){ let a = 100; }
效果又会不一样
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
js变量提升,等价于下面这样
对,是变量提升的原因,另外,js查找变量是先查找当前作用域在查找父级作用域的,先查找到test里有a的声明,就停止查找了,所以就是undefined
在es5中并不存在块级作用域,因而
即便没有进入if判断,但是 var a实际上与alert(a)实在同一个作用域。 在同一个作用域内通过var声明变量存在变量提升。
如果我么稍微改一下,
效果又会不一样