Less portable and don't give the subprocess isolation that a proper script has. That's sometimes an advantage (can modify shell state — I think that's the primary one), sometimes a disadvantage (influenced by shell state [e.g. set -e], "exit" exits the entire shell, hard to do cleanup / use signal handlers, can accidentally change shell state [like cwd].)
But I'd use a shell function over an alias if a script isn't an option.