Dies ist ein Beispiel für die js-Erhöhung oben.
Sehen Sie, dass die Funktionsdeklaration einen Code hat
if(condition){
function sayHi(){
alert('hi')
}
}else{
function sayHi(){
alert('Yo')
}
}
Es wird gesagt, dass dieser Code eine ungültige Syntax hat. Die meisten Browser geben die zweite Anweisung zurück, und Firefox gibt die erste Anweisung zurück.
Wenn es in eine Funktionsausdrucksform geändert werden kann, warum ist das so?
var sayHi;
if(condition){
sayHi=function(){
alert('Hi')
}
}else{
sayHi=function(){
alert('Yo!')
}
}
因为第一个是函数声明, 但是一般不会放在if-else中声明函数
第二个是把匿名函数赋值给变量 ,不存在提升之类的
直接写function xxx(){} 会导致声明提前,如果有两个同名的这样的函数,相当于在顶部执行了两次var xxx,所以无效
和什么声明前置没有关系,高程第三部那时候JavaScript规范还都是ES5,浏览器还没有实现块级作用域(ES2016+),作用域级别只是函数级别的。所以你写的
和写的
没有本质区别
js是有声明提前的!!!function会在声明时直接提到作用域顶端。if中不存在作用域,所以两个function是一个作用域,第二个会替掉第一个。! 而你第二段代码,先声明了变量sayhi,在if判断后才对sayhi进行赋值,