Side effects, anything that isn't computing an output from an input. Plus all info needed to process input needs to be contained within the function. Accessing a global variable outside the function creates an impure function. It relies on something that can change that's outside the function. If that changes, then the same input giving same output rule will break.