Потому что в checkAge перезаписывается аргумент x, а не глобальная переменная. Это называется "затенение". Переименуйте аргумент. Хотя, по существующей "логике" его вообще передавать не имеет смысла. И еще запомните, что примитивные типы даных передаются по значению, а не по ссылке.
А смысл? "Hello World" на десяти языках?
И на знании только языка программирования далеко не уедешь. Это только фундамент, а на нем целая экосистема и для каждого языка своя.
Алексей Гончаров, не принимайте всерьез - убогими бывают программисты, а не языки. И чистый JS используют во многих проектах. Но к паттернам это никакого отношения не имеет.
И у тех, кто еще лет 5-7 назад получал за такой стиль по шапке. ))