I'm the second to answer so the first answer is suggested to read. And here are the ideas I think is very basic:
Everything is an Expression functional programming is distinguished from imperative programming by telling what to do rather than how to do in every step. Programs in FP are written as expressions, and even imperative operations are described in expressions.
Immutability I regard this one as the most significant difference FP is from OOP. Immutability forces programmer to think in the way of compositions of expressions and you may see it in the way people operate lists in FP comparing to that in OOP.
High Order function & Composition composition of functions is commonly used in FP.
Pure Functions & Side Effects you need to understand what "side effects" means before you are ready to isolate side effects in FP. Pure functions make program more reliable and make it harder to program in pure functional languages. I brings benefits in many ways.
You can find more about that by learning Haskell.