Cloud Function: designed to be run via code, in your apps and execute complex business logic for your users. It’s a custom endpoint dedicated to your users
Cloud Job: An internal task, only runnable by master key. Mainly used to execute some migrations or in developpment to create some tests data etc… It’s a maintenance endpoint dedicated to developers not users.
Another difference maybe worth mentioning is that Cloud Jobs have a historic status log where you can see how jobs executed and you can write custom status messages to that log.
For example, if you want to run a periodic clean-up task every hour in your production environment, you can use the Parse Dashboard to look into the status of each of these job executions, whether they were successful, how many items were cleaned up and whatever you may want to write into the status log.
Since Cloud Jobs were originally designed to also run periodically, Parse Dashboard offers an interface to set-up scheduled jobs that run for example every 5 minutes, once a day, every Monday, etc.
Cloud Code does not offer such a built-in status log or scheduling interface.