Memoize does exactly what the name says! It takes a function, and returns a version of it that will only calculate its return value once for a given set of inputs, and then cache this value and return it on subsequent calls. It’s absolutely great for functions that always give the same result but can take a long time to compute (the Fibonacci sequence is an oft-used example). For more information, Wikipedia has a great page on memoization.
Another great use would be for hash functions (e.g. the also-bundled-with-alloy sha1)
Underscore provides a awesome set of isSomething functions that can tell you all kinds of things about a given variable, ranging from its type to whether it is finite. Examples include isEmpty, isArguments, and isDate.
_.once, _.throttle, and other function modifiers
_.once and _.throttle are great for controlling frequency of execution of functions. Simply put, _.once makes it so a function can only be executed once, and _.throttle rate limits a function so that it can only be executed once every so often (e.g. at most once every 200 ms). Both are extraordinarily useful in the context of Titanium for dealing with issues associated with events getting created too quickly to be handled in a sensical fashion, such as a user tapping a button too quickly or scrolling too fast. Other awesome function processing functions include _.after (provided function is executed after being called a certain number of times), and _.debounce (function is only executed after it hasn’t been called for some period of time).
Underscore.js contains roughly 80 different commonly used functions for different purposes, too many for me to possibly go over here. Take a look at their docs, and feel free to leave comments about your favorites below!