Я узнал, что чистая функция - это функция, которая не изменяет глобальное состояние, точка. Если это так, функции внутри функций могут изменять состояние внешней функции и при этом быть чистыми, правильными?
Пример:
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 не оптимизирует это, процессор будет выполнять больше инструкций
- слежка - плохая практика
Вопрос в том, что такое чистая функция, когда мы говорим о функции внутри функции?