1.什么是内联函数?var a = function b(){}; 这个不是一般的函数表达式吗,为什么又叫做内联函数?2.函数整体外加一个括号什么意思?加括号与不加括号什么区别?在非严格模式下我们可以使用 num * arguments.callee(num - 1)来代替函数名。严格模式下,通常会采用内联命名函数来解决这个问题。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贡献1993条经验 获得超5个赞
lz这里说的其实是命名函数表达式,其与普通的函数主要差别是在于其自身还有个用于内部的函数命名,例如
var a = function b(){};
的b,因为严格模式下禁止了arguments.callee
,可以利用这个命名进行递归。内联函数其实指的是把另一个函数的代码直接放入调用的函数中直接执行,而不是以函数调用的方式,这样可以节省一定的内存及执行时间,但是这样做很显然地会破坏封装,增大理解难度及修改难度。
我理解中,这里加括号与否,在意义上有些微妙不同,具有括号时:声明函数f,并将其赋值给factorial;不具有括号时:定义函数factorial的函数表达式。其完成功能上的作用是相同的,即可以完成内部递归调用。但是至于这两者在性能与执行速度上有何不同,暂时没有任何想法。
以上,出错的话请务必评论指正。
添加回答
举报
0/150
提交
取消