前端 - JavaScript问题:var a=5; var a; alert( a ) // 5。请问这是为什么?
巴扎黑
巴扎黑 2017-04-10 15:58:38
[JavaScript讨论组]
var a=5;  var a;  alert( a )  // 5

我的理解:
第一次var a:var a=5; ==>在内存中开辟空间a,a中保存了数字5。
第二次var a:var a; ==>在内存中开辟空间a,a中什么都没有。

程序从上至下,从左至右执行,所以最后弹出的是“第二次 var a”的结果,第二次 var a中,a没有保存值,所以是undefined。

但执行结果是5,请问一下alert为什么不是undefined?


当局部变量和函数参数同名时,该怎么理解呢?也和预解析有关系吗?

function test(a){
        var a=a||5;
        alert(a)
}

test() //没传参的话,就是5;传参的话就alert参数

巴扎黑
巴扎黑

全部回复(3)
伊谢尔伦
var a=5;  var a;  alert( a )  // 5

等同于

var a;  a = 5;  alert( a )  // 5

js在预编译阶段,会忽略重复的声明,然后在运行阶段赋值;

巴扎黑

JavaScript有预解析行为,整段代码的运行过程为:

  1. 进行预解析声明,var a

  2. 代码逐步执行过程,此时a = 5,而第二行代码var a在此处没有起到作用。

所以弹出的值为5,而不是undefined。

可以看看解释JavaScript的“预解析(置顶解析)”。

PHP中文网

节奏是这样:

声明第一个 a;
声明第二个 a,发现已经声明了,不重新声明,跳过;
赋值 a 等于5;
执行alert(a)

done~

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

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