The basic difference is that a constructor function is used with the new keyword (which causes JavaScript to automatically create a new object, set this within the function to that object, and return the object):

var objFromConstructor = new ConstructorFunction();

A factory function is called like a "regular" function:

var objFromFactory = factoryFunction();

But for it to be considered a "factory" it would need to return a new instance of some object: you wouldn't call it a "factory" function if it just returned a boolean or something. This does not happen automatically like with new, but it does allow more flexibility for some cases.

Of course you can make factory functions much more complicated than that simple example.

Some people prefer to use factory functions for everything just because they don't like having to remember to use new (EDIT: and this can be a problem because without new the function will still run but not as expected). I don't see that as an advantage: new is a core part of the language so to me deliberately avoiding it is a bit arbitrary - might as well avoid other keywords like else.

One advantage to factory functions is when the object to be returned could be of several different types depending on some parameter.