self invoking function wrapper