In three.js source, there are multiple usage of this pattern. It seems that taking out the IIFE will not make any difference. My guess is that a named function is perfered over an anonymous function.
https://github.com/mrdoob/three.js/blob/master/src/core/Object3D.js
Object.assign( THREE.Object3D.prototype, ..., {
...
rotateX : function () {
var v1 = new THREE.Vector3( 1, 0, 0 );
return function rotateX( angle ) {
return this.rotateOnAxis( v1, angle );
};
}(),
...
})