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 );
        };
    }(),
    ...
})
 
    