456이 출력되는 이유는 외부 렉시컬 환경 참조 때문입니다. d()에서 우선 선언적 환경 레코드에서 value를 찾습니다. 그런데 없으므로 외부 렉시컬 환경 참조에서 찾습니다. 그런데 없으므로 다시 외부 렉시컬 환경 참조의 외부 렉시컬 환경 참조에서 찾습니다. 이런 방법으로 계속 외부 렉시컬 환경 참조를 따라 올라가면서 value 변수를 찾습니다.
d()의 스코프는 c()이고 c()의 스코프는 b()입니다. 따라서 d()의 스코프는 c()도 되고 b()도 됩니다. 물로 a()도 됩니다.