edit set-map

This commit is contained in:
ruanyf
2016-01-08 19:17:16 +08:00
parent 73be57cbeb
commit 91d44bdb6f
3 changed files with 23 additions and 8 deletions
+12 -1
View File
@@ -1138,7 +1138,7 @@ function addOne(a){
}
```
上面的函数不会进行尾调用优化,因为内层函数inner用到了,外层函数addOne的内部变量one。
上面的函数不会进行尾调用优化,因为内层函数`inner`用到了,外层函数`addOne`的内部变量`one`
### 尾递归
@@ -1238,6 +1238,17 @@ factorial(5) // 120
总结一下,递归本质上是一种循环操作。纯粹的函数式编程语言没有循环操作命令,所有的循环都用递归实现,这就是为什么尾递归对这些语言极其重要。对于其他支持“尾调用优化”的语言(比如Lua,ES6),只需要知道循环可以用递归代替,而一旦使用递归,就最好使用尾递归。
### 严格模式
ES6的尾调用优化只在严格模式下开启,正常模式是无效的。
这是因为在正常模式下,函数内部有两个变量,可以跟踪函数的调用栈。
- `arguments`:返回调用时函数的参数。
- `func.caller`:返回调用当前函数的那个函数。
尾调用优化发生时,函数的调用栈会改写,因此上面两个变量就会失真。严格模式禁用这两个变量,所以尾调用模式仅在严格模式下生效。
## 函数参数的尾逗号
ES7有一个[提案](https://github.com/jeffmo/es-trailing-function-commas),允许函数的最后一个参数有尾逗号(trailing comma)。