我了解到纯函数是一个不会改变全局状态的函数。如果这是真的,函数内的函数可以改变外部函数的状态并且仍然是纯的,对吗?
例子:
function func1() {
let name = "My Name"
func2()
function func2() {
// alter name here.
}
}
在上面的例子中,func2
仍然是纯的,因为它不使用任何全局状态。
这就是我的看法,但我的工作同事认为这func2
并不纯粹,应该这样写:
function func1() {
let name = "My Name"
func2(name)
function func2(name) {
// use name here.
}
}
这很糟糕,因为:
- 如果 v8 没有对此进行优化,CPU 将运行更多指令
- 阴影是一种不好的做法
问题是:当我们谈论函数中的函数时,纯函数到底是什么?