Javascript future scope

This was almost magic for me.

In javascript functions can have non local inputs in them which are only declared post the function declaration.

function hello() {

dude = 'Rambo';

hello(); // => Rambo

Elaborating this a bit

let person = (function() {
  function status() {
    if (person.checked) {
    } else {
      console.log('not checked');

  function checkPerson() {
    person.checked = true;

  return {
    checked: false,
    check: checkPerson,
    status: status,

person.status(); // "not checked"
person.status(); // "checked"

It boggled me initially how the definition of function checkPerson was able to understand what person is, turns out it’s some js magic!