function fn( a=5 ){} // 参数默认值
function fn( {a,b=5} ){} // 参数默认值
function fn( {a,b=5}={} ){} // 参数默认值
// a参数必填,否则报错
function foo(a = throwIfMissing()) {
return a;
}
// 将多余的参数放在arr中
function fn(...arr){}
fn.name // -> fn
// 尾调用:最后一步是调用另一个函数`只在严格模式有效`
// 尾递归:递归函数最后一步是调用,性能好
// 好处:我们知道,函数调用会在内存形成一个“调用记录”,又称“调用帧”(call frame),保存调用位置和内部变量等信息。如果在函数A的内部调用函数B,那么在A的调用帧上方,还会形成一个B的调用帧。等到B运行结束,将结果返回到A,B的调用帧才会消失。如果函数B内部还调用函数C,那就还有一个C的调用帧,以此类推。所有的调用帧,就形成一个“调用栈”(call stack)。
function a(){ return b();} // 是
function a(){ return b()+1; } // 不是
function a(){ b();} // 不是
function a(){ if(true){ return b()}; return b(); // 是
网友评论