Functional reactive programming combines functional programming and reactive programming. Functional programming avoids mutable state and side effects through referential transparency and reusable functions. Reactive programming builds reactive systems through asynchronous data streams and treating everything as a stream. Observables are the core component, representing a stream of data over time, and operators allow querying, transforming, and combining observables. RxJS is a popular library for implementing functional reactive programming.