函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別?
傳送門(mdn推薦的文章)
?函數(shù)聲明:function functionName(){}
?函數(shù)表達(dá)式:var fn = function(){}
?函數(shù)聲明會提前,函數(shù)表達(dá)式可以省略標(biāo)識符(函數(shù)名)。
函數(shù)聲明時就已經(jīng)完成函數(shù)的構(gòu)建了,而函數(shù)表達(dá)式是在程序運行到此處才完成構(gòu)建(函數(shù)表達(dá)式的變量聲明 完之后值為undefined),所以在重名的情況下,表達(dá)式會替代聲明
示例

另外mdn里還有一種條件創(chuàng)造函數(shù)(Conditionally created functions),我目前還不清楚什么時候應(yīng)該使用這種方式來定義函數(shù)。希望各位大牛指教。
什么是函數(shù)的聲明前置?什么是變量的聲明前置?
所謂的變量聲明前置就是在一個作用域塊中,所有的變量都被放在塊的開始出聲明。
和變量聲明前置一樣,執(zhí)行代碼之前會先讀取函數(shù)聲明,只要函數(shù)在代碼中進(jìn)行了聲明,無論它在哪個位置上進(jìn)行聲明,js引擎都會將它的聲明放在范圍作用域的頂部。
arguments 是什么
arguments是函數(shù)的形參,它是一個類數(shù)組對象。
函數(shù)重載怎樣實現(xiàn)
- JS中不存在函數(shù)的“重載”,同名函數(shù)會被覆蓋,但是JS卻可以利用函數(shù)體針對不同的參數(shù)調(diào)用相應(yīng)的邏輯來達(dá)到其他語言的函數(shù)重載的效果。
- 其他語言的函數(shù)重載樣例:
function int translateNumber(parseInt(a),parseInt(b)){
statement;
}
function float translateNumber(parseFloat(a),parseFloat(b)){
statement;
}
- JS偽"重載"樣例:
function getInfOfPeople(name,age,sex) {
if(name){
console.log(name);
}
if(age){
console.log(age);
}
if(sex){
console.log(sex);
}
}
getInfOfPeople(2,3);
getInfOfPeople(2,3,1);
立即執(zhí)行函數(shù)表達(dá)式是什么?有什么作用
函數(shù)構(gòu)建后直接就可以運行的函數(shù)叫做立即執(zhí)行函數(shù)(傳送門)
作用:從傳送門中的文章來看,作用就是利用閉包來形成私有變量。