javascript - alert(i);结果会报错,alert(i);var i = 0;结果是undefined,为什么后者不报错?
大家讲道理
大家讲道理 2017-04-11 12:25:57
[JavaScript讨论组]

alert(i);//报错,i未定义
alert(i);var i = 0;//undefined

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(7)
迷茫

这是因为Javascript并非完全的按顺序解释执行,而是在解释之前会对Javascript进行一次“预编译”,在预编译的过程中,会把定义式的函数优先执行,也会把所有var变量创建,默认值为undefined,以提高程序的执行效率。

迷茫
alert(i);var i = 0;

var i;
alert(i);
i = 0;
大家讲道理

在JavaScript中所有在作用域中var声明的变量会自动提升到该作用域的顶部。不过ES6中let声明变量是不存在声明提升的。javascript是单线程的,代码是一块一块的执行的,一块有时候是一条语句,有时候是{}包起来的代码块,有时候是一小块作用域内的代码。在代码块内,会优先把var变量声明不赋值,所以为undefined。

高洛峰

变量提升
es6 用let关键字可以解除这种烦恼
归根究底是 js太不规范了,坑太多

高洛峰

在js中,会变量提升,然后按顺序执行;

alert(i);var i=0;

其实等价于

var i;
alert(i);
i=0;

PHP中文网

变量提升 看下相关资料就知道了

ringa_lee

是变量提升在做鬼。

es6引入了块作用域,使用let代替var做变量声明,就不会有变量提升了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号