从 ES5开始,函数内部可以设定为严格模式。ES2016做了一些修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,则该函数内部就不能显式设定为严格模式,否则会报错。
这样规定是因为函数内部的严格模式,同时适用于函数体和函数参数,但 函数在执行的时候,先执行函数参数,然后再执行函数体,这样就有一个不合理的地方,只有从函数体之中,才能知道参数是否应该以严格模式执行,但是参数却应该先于函数体执行。
尾调用(Tail Call)是函数式编程的一个重要概念,就是指某个函数的最后一步是调用另一个函数。