Вот пример, наглядно демонстрирующий разницу Function Declaration и Function Expression. Основное отличие, на мой взгляд, в том, что function declaration появляется в контексте выполнения раньше всего, отсюда и доступность такой функции в любом месте области видимости. В свою очередь function expression как и остальные expression выполняется, или как в приведенном примере, присваивается значению переменной прямо во время выполнения скрипта, поэтому она доступна только после строки с присвоением и это нужно иметь в виду.