Есть ли у функций JavaScript прозрачность ссылок с изменяемым состоянием? - PullRequest
0 голосов
/ 23 октября 2018

Прочтение этой статьи о функциональном программировании Javascript и упоминается Ссылочная прозрачность определяется как:

Ссылочная прозрачность: функция всегда дает одно и то жевозвращаемое значение для тех же аргументов.Это означает, что функция не может зависеть от любого изменяемого состояния.

Функции JUCascript IIUC удовлетворяют этому требованию, даже если они зависят от изменяемого состояния, поскольку две функции не могут работать в общем состоянии, даже если они работают вв то же время?

1 Ответ

0 голосов
/ 23 октября 2018

Итак, для подведения итогов нашего обсуждения, да, функции Javascript имеют ссылочную прозрачность, пока изменяемое состояние, от которого они зависят, не изменится.

Другими словами, один и тот же выход будет предоставлен для того же входа, в то время как изменяемое состояние, от которого зависит функция, остается постоянным.

Это кажется несколько очевидным, но для Javascript и функционального программирования это важная концепция / реализация, потому что Javascript не может запускать функцию в двух потоках одновременно.Если бы мы могли изменить состояние, от которого зависит функция, во время работы функции, мы могли бы создать условия гонки, о которых трудно рассуждать, и это сделало бы результаты функции непредсказуемыми, чего мы и пытаемся избежать с помощью ссылочной прозрачности.

Например, функция fn(5), которая зависит от изменяемого состояния x, всегда будет возвращать один и тот же результат для одного и того же ввода, пока x не изменится.

В средах, отличных от Javascript, можно изменить x во время работы функции, поэтому два вызова fn(5) могут возвращать разные результаты.

С Javascript, если fn(5) возвращает другой результат,мы точно знаем почему.Это потому что x был изменен между вызовами fn(5).

...