Heim > Fragen und Antworten > Hauptteil
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!')
}
}
伊谢尔伦2017-07-05 10:40:34
和什么声明前置没有关系,高程第三部那时候JavaScript规范还都是ES5,浏览器还没有实现块级作用域(ES2016+),作用域级别只是函数级别的。所以你写的
if(condition){
function sayHi(){
alert('hi')
}
}else{
function sayHi(){
alert('Yo')
}
}
和写的
function sayHi(){
alert('hi')
}
function sayHi(){
alert('Yo')
}
没有本质区别
PHP中文网2017-07-05 10:40:34
js是有声明提前的!!!function会在声明时直接提到作用域顶端。if中不存在作用域,所以两个function是一个作用域,第二个会替掉第一个。! 而你第二段代码,先声明了变量sayhi,在if判断后才对sayhi进行赋值,