There are no global variables and no side-effects, and that's why a function will always return the same value given the same inputs. Nothing matters but the parameters that are passed in.
Because of this you have to go through some hoops to perform some imperative constructs: looping is done through recursion, for example.
// Crappy pseudocode example\nfunction forLoopPositiveIncrementsOnly(int from, int to, int inc, function dowhat)\n{\n if (from > to) return;\n dowhat(from);\n loop(from + inc, to, dowhat);\n}
Note that there IS a stack, but you can't modify the values on the stack, just use them.