Javascript – Ich sehe eine Funktion im Abschnitt zur Funktionsdeklaration und verstehe sie nicht ganz.
我想大声告诉你
我想大声告诉你 2017-07-05 10:38:34
0
4
801

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!')
    }
}
我想大声告诉你
我想大声告诉你

Antworte allen(4)
黄舟

因为第一个是函数声明, 但是一般不会放在if-else中声明函数

第二个是把匿名函数赋值给变量 ,不存在提升之类的

黄舟

直接写function xxx(){} 会导致声明提前,如果有两个同名的这样的函数,相当于在顶部执行了两次var xxx,所以无效

伊谢尔伦

和什么声明前置没有关系,高程第三部那时候JavaScript规范还都是ES5,浏览器还没有实现块级作用域(ES2016+),作用域级别只是函数级别的。所以你写的

if(condition){
    function sayHi(){
        alert('hi')
    }
}else{
    function sayHi(){
        alert('Yo')
    }
}

和写的

function sayHi(){
  alert('hi')
}
function sayHi(){
  alert('Yo')
}

没有本质区别

洪涛

js是有声明提前的!!!function会在声明时直接提到作用域顶端。if中不存在作用域,所以两个function是一个作用域,第二个会替掉第一个。! 而你第二段代码,先声明了变量sayhi,在if判断后才对sayhi进行赋值,

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage