How do we define functions in set theory? 
Sets and functions, for example, did not form a category under the set theorist's definition of a function. Most often the set theorist's definition requires a function to have a set as domain of definition but not a codomain in the sense of category theory. For the set theorist there is a well defined function whose domain is the set of real numbers and which takes each number to its square. For category theorists. the definition is not complete until we specify a codom, which will contain all values of the function but need not coincide with the set of those values.
The Uses and Abuses of the History of Topos Theory - Colin McLarty

I don't understand what is being said in the above paragraph. If a function is defined as a mapping between two set, aren't we providing the codomain in it's definition?
 A: It's probably best to give a concrete example of this phenomenon.
Say we want to think about the function $f : \{ 1,2 \} \to \{a,b\}$ which sends $f(1) = a$ and $f(2) = b$.
In ZFC everything is a set. In particular we need to choose a way of encoding $f$ as a set so that we can talk about it1. The widely accepted approach is to encode $f$ by its graph: $f = \{ (1,a), (2,b) \}$. Now, a far as ZFC is concerned, this set is the function $f$.
But let's talk about a new function $g : \{1,2\} \to \{a,b,c\}$ which sends $f(1) = a$ and $f(2) = b$. Well, again, in ZFC we identify $g$ with is its encoding: $g = \{(1,a), (2,b)\}$.
So then $f = g$! They're literally the same set, and so we cannot distinguish them in ZFC. This is fine for the purposes of set theory (and even for our day to day lives), but it explains the friction between the category-theoretic "codomain" and the set-theoretic encoding of functions. From only the encoding of $f$, we can't actually recover the codomain!
How big of a deal this is depends on who you ask. I don't immediately see a reason why we couldn't solve this "problem" by keeping track of $A$ and $B$ explicitly and defining $f : A \to B$ to be the tuple $(A, \{ (a, f(a)) \mid a \in A \}, B)$. It's possible that we would need to redo some small parts of early set theory (for instance, this might change the rank of $f$, which might matter in particularly weak settings). More importantly, a lot of set theorists will build functions by taking unions of partial functions, and this modified encoding is slightly less amenable to that technique.
I suspect this is all superficial, and the new encoding wouldn't matter that much in the working life of set theorists, but I can't say for sure. Hopefully someone with more experience in set theory can say some words about this.

1. As an aside, this is one of the common arguments that people make in favor of type theory. We don't need to make any encoding choices, since we allow more complicated "primitive" things than just sets.

I hope this helps ^_^
