javascript虽然是解释执行的语言,但也会进行预编译。
if(condition){
function sayHi(){
alert("Hi!");
}
}else{
function sayHi(){
alert("Yo!");
}
}
这种形式,JS引擎在预编译的过程中会注册方法到window对象下,就是window.sayHi。
而不会顾及if else条件,导致重复的sayHi方法被注册,在这种情况下是无效语法。
var sayHi;
if(condition){
sayHi=function sayHi(){
alert("Hi!");
};
}else{
sayHi=function sayHi(){
alert("Yo!");
};
}
而下面这种是作为一个 变量(而非函数function),变量是可以被重复赋值的,所以语法不会有问题。