The typeof trick is handy when checking instance variables that may or may not exist, but it is not necessary for declared variables in the local scope (and the closure scope).

derp was not declared as a variable in your console when you executed it.
useCache IS already declared as a local variable in the function scope since it is a parameter, so there is no danger of a ReferenceError.

Counterexample:
(function(derp){undefined === derp ? console.log('1') : console.log('2')})();//prints '1', no ReferenceError
The following all behave as expected:
(function(derp){undefined === derp ? console.log('1') : console.log('2')})(false);
(function(derp){undefined === derp ? console.log('1') : console.log('2')})(true);
(function(derp){undefined === derp ? console.log('1') : console.log('2')})(undefined);