I gave a presentation on Reactive Programming in JavaScript at FunctionalJS London on 28th April 2014.
To describe reactive programming, I like to think of the key concepts of functional programming (using values and functional composition to solve problems in a declarative style) applied to real-world constraints such as async, mutable state and UIs.
The main idea behind reactive programming is that of “data types that represent values over time”. Because they are values (rather than side-effecting callbacks, for instance), they can be passed around and composed like any value, abstracting away the execution flow into declarative expressions.
For UIs, data-bindings provide a declarative mean to bind values (either plain values or reactive “observables”) to the view.