Ámbito Javascript de variables

La salida es 15 (en f, x se toma como 10 e y es 7) con lo siguiente:

var x = 5;
function f(y) { return (x + y) - 2};
function g(h) { var x = 7; return h(x) };
{ var x = 10; z = g(f); console.log(z) };

¿Por qué x tomó el valor de la cuarta línea y no de la primera línea (y por qué no de la tercera línea)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta