在网上看到这样一段代码
var condition = true;
if(condition){
function sayHi(){
alert("Hi!");
}
} else {
function sayHi(){
alert("Yo!");
}
}
sayHi();
但结果却是yo!
为什么呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
function sayHi(){} 这种是函数声明式写法,会声明提前,将它置于最接近的环境中(这里是全局执行环境了)。
而你两次都是同一个函数名,后一个会覆盖前一个。所以你得到的就是 Yo!
你的相当于这样:
是函数被覆盖了
没猜错的话这段代码出自于:
javascript高级程序设计
,因为我也看到这里了。下面摘自书上内容:纯手打,如果对题主有帮助,很高兴。
加个日志应该很明显,和if进的分支没有关系,和js加载方法是有关的,function这种方式定义方法的话,js是从上往下加载的,同方法名的话,后面的会覆盖前面的方法,还没运行的时候,第二个sayHi已经把第一个sayHi覆盖了
换一种函数定义方法,结果就不同了