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参数
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
等同于
js在预编译阶段,会忽略重复的声明,然后在运行阶段赋值;
JavaScript有预解析行为,整段代码的运行过程为:
进行预解析声明,
var a代码逐步执行过程,此时
a = 5,而第二行代码var a在此处没有起到作用。所以弹出的值为5,而不是undefined。
可以看看解释JavaScript的“预解析(置顶解析)”。
节奏是这样:
done~