- 回调函数:一个函数,参数为另一个函数,当满足某个条件是执行该参数函数
- 闭包:一个函数,return返回另一个函数(不是调用),在里面的函数中引用外面函数的变量
- 递归:函数自己调用自己
- 尾调用:一个函数,最后一步执行的操作是调用另一个函数,不能有任何其他操作(正确为:return fn()),return fn()+1后面有赋值操作,fn()后面有return undefined,所以都不行。只能在严格模式生效,因为非严格模式有arguments、caller等保存参数和调用该函数的函数的信息,可以跟踪函数的调用栈
- 尾递归:尾调用中最后一步调用的是自己
- 柯里化:将多参数的函数转化成单参数形式,可以使用ES6的函数参数默认值,让默认只传一个参数
- 蹦床函数:一个函数,接收另一个函数为参数(改参数一般为真正的逻辑代码),当该参数为函数时执行该函数。即返回一个函数,然后执行,不是在函数中调用函数。将递归执行转化为循环执行,可以减少调用帧。
- 调用帧:保存着函数调用位置和内部变量等信息,当在a函数中调用b函数时,a的调用帧上方就会产生b的调用帧
- 调用栈:递归会产生调用帧,所有调用帧就形成调用栈,很容易产生“栈溢出(Stack Overflow)”。尾调用只存在一个调用帧,可以解决栈溢出
- 函数内部使用严格模式:函数参数不能有默认值、解构赋值、rest参数(扩展用算符…)
function fn(){
console.log