To be very clear and practical:
Stub: A class or object that implements the methods of the class/object to be faked and returns always what you want.
Example in JavaScript:
var Stub = { method_a: function(param_a, param_b){ return 'This is an static result'; }}
Mock: The same of stub, but it adds some logic that "verifies" when a method is called so you can be sure some implementation is calling that method.
As @mLevan says imagine as an example that you're testing a user registration class. After calling Save, it should call SendConfirmationEmail.
A very stupid code Example:
var Mock = { calls: { method_a: 0 } method_a: function(param_a, param_b){ this.method_a++; console.log('Mock.method_a its been called!'); }}