> For the complete documentation index, see [llms.txt](https://xiaoyang-liu.gitbook.io/programming-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://xiaoyang-liu.gitbook.io/programming-notes/web-development/you-dont-know-js/get-started/chapter-4-the-bigger-picture.md).

# Chapter 4: The Bigger Picture

## Pillar 1: Scope and Closure

Scopes nest inside each other, and only variables at the level of scope nesting or in higher/outer scopes are accessible.

The scope unit boundaries, and how variables are organized in them, is determined at the time the program is parsed.

hoisting: when all variables declared anywhere in a scope are treated as if they're declared at the beginning of the scope.

`var`-declared variables are function scoped, even if they appear inside a block.

Closure is a natural result of lexical scope when the language has functions as first-class values. It maintains access to its original scope variables even if it is passed around as a value.

## Pillar 2: Prototypes

JS is one of very few languages where you have the option to create objects directly and explicitly, without first defining their structure in a class.

Behavior delegation: Embrace objects as objects, forget classes altogether, and let objects cooperate through the prototype chain.
