慕虎7371278
2019-02-06 13:17:23
1.什么是內(nèi)聯(lián)函數(shù)?var a = function b(){}; 這個不是一般的函數(shù)表達(dá)式嗎,為什么又叫做內(nèi)聯(lián)函數(shù)?2.函數(shù)整體外加一個括號什么意思?加括號與不加括號什么區(qū)別?在非嚴(yán)格模式下我們可以使用 num * arguments.callee(num - 1)來代替函數(shù)名。嚴(yán)格模式下,通常會采用內(nèi)聯(lián)命名函數(shù)來解決這個問題。var factorial = (function f(num) {if (num <= 1) {return 1;} else {return num*f(num - 1);}});console.log(factorial(5)); // 120var anothorFactorial = factorial;factorial = null;console.log(anothorFactorial(5)); // 120多謝回答。
1 回答

ibeautiful
TA貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊
lz這里說的其實是命名函數(shù)表達(dá)式,其與普通的函數(shù)主要差別是在于其自身還有個用于內(nèi)部的函數(shù)命名,例如
var a = function b(){};
的b,因為嚴(yán)格模式下禁止了arguments.callee
,可以利用這個命名進(jìn)行遞歸。內(nèi)聯(lián)函數(shù)其實指的是把另一個函數(shù)的代碼直接放入調(diào)用的函數(shù)中直接執(zhí)行,而不是以函數(shù)調(diào)用的方式,這樣可以節(jié)省一定的內(nèi)存及執(zhí)行時間,但是這樣做很顯然地會破壞封裝,增大理解難度及修改難度。
我理解中,這里加括號與否,在意義上有些微妙不同,具有括號時:聲明函數(shù)f,并將其賦值給factorial;不具有括號時:定義函數(shù)factorial的函數(shù)表達(dá)式。其完成功能上的作用是相同的,即可以完成內(nèi)部遞歸調(diào)用。但是至于這兩者在性能與執(zhí)行速度上有何不同,暫時沒有任何想法。
以上,出錯的話請務(wù)必評論指正。
添加回答
舉報
0/150
提交
取消