Buenas,
1º. La palabra clave
function se usa sin nombre para crear una función anónima. Es una función normal pero sin nombre.
Se usa en casos en los que sólo necesitas utilizar la función en un sitio (por ejemplo).
Por supuesto, una función anónima puede asignarse a una variable, de manera que se puede usar como una función con nombre normal.
Hay mucha información en Internet sobre las funciones en javascript. Lo importante es que las funciones son datos, es decir:
- Se puede pasar funciones como parámetros a otras funciones
- Se pueden devolver funciones como resultado de otra función
- Se puede asignar funciones a variables
etc.
2º. Sobre el with, no es recomendable usarlo demasiado (no quiere decir que no lo uses nunca, pero restringe su uso). Hay usos recomendables y otros que no. Puedes buscar más información con Google
3º. No funciona la segunda forma porque entra en juego una característica llamada closures. Es un tema un poco largo y complicado de explicar (o no sé como explicártelo bien). Te sugiero que leas algo sobre closures y lo entenderás.
Un saludo.