国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - 看到函數(shù)聲明這塊有個函數(shù)不是很理解
我想大聲告訴你
我想大聲告訴你 2017-07-05 10:38:34
0
4
885

這是js高程上面的一個例子
看到函數(shù)聲明有一個代碼

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

說是這段代碼無效語法,大多數(shù)瀏覽器會返回第二個聲明,firefox會返回第一個聲明,這是為什么?
如果改成函數(shù)表達(dá)式形式的就可以了,這又是為什么?

var sayHi;
if(condition){
    sayHi=function(){
        alert('Hi')
    }
}else{
    sayHi=function(){
        alert('Yo!')
    }
}
我想大聲告訴你
我想大聲告訴你

全部回復(fù)(4)
黃舟

因為第一個是函數(shù)聲明, 但是一般不會放在if-else中聲明函數(shù)

第二個是把匿名函數(shù)賦值給變量 ,不存在提升之類的

黃舟

直接寫function xxx(){} 會導(dǎo)致聲明提前,如果有兩個同名的這樣的函數(shù),相當(dāng)于在頂部執(zhí)行了兩次var xxx,所以無效

伊謝爾倫

和什么聲明前置沒有關(guān)系,高程第三部那時候JavaScript規(guī)范還都是ES5,瀏覽器還沒有實現(xiàn)塊級作用域(ES2016+),作用域級別只是函數(shù)級別的。所以你寫的

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

和寫的

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

沒有本質(zhì)區(qū)別

洪濤

js是有聲明提前的?。。unction會在聲明時直接提到作用域頂端。if中不存在作用域,所以兩個function是一個作用域,第二個會替掉第一個。! 而你第二段代碼,先聲明了變量sayhi,在if判斷后才對sayhi進(jìn)行賦值,

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板