Итак, для подведения итогов нашего обсуждения, да, функции Javascript имеют ссылочную прозрачность, пока изменяемое состояние, от которого они зависят, не изменится.
Другими словами, один и тот же выход будет предоставлен для того же входа, в то время как изменяемое состояние, от которого зависит функция, остается постоянным.
Это кажется несколько очевидным, но для Javascript и функционального программирования это важная концепция / реализация, потому что Javascript не может запускать функцию в двух потоках одновременно.Если бы мы могли изменить состояние, от которого зависит функция, во время работы функции, мы могли бы создать условия гонки, о которых трудно рассуждать, и это сделало бы результаты функции непредсказуемыми, чего мы и пытаемся избежать с помощью ссылочной прозрачности.
Например, функция fn(5)
, которая зависит от изменяемого состояния x
, всегда будет возвращать один и тот же результат для одного и того же ввода, пока x не изменится.
В средах, отличных от Javascript, можно изменить x во время работы функции, поэтому два вызова fn(5)
могут возвращать разные результаты.
С Javascript, если fn(5)
возвращает другой результат,мы точно знаем почему.Это потому что x
был изменен между вызовами fn(5)
.