Local

foo(){
  if [ -z "${1}" ]; then
    echo "hi: ${hi}"
    echo "hi_without_local: ${hi_without_local}"
  else
    local hi="${1}"
    hi_without_local="${1}"

    echo "Saved values."
  fi
}

main() {
  foo "hello"
  foo
}

main "${@}" || exit 1

Output:

Saved values.
hi:
hi_without_local: hello