Bindings
- For bindings defined outside of any function or block, the scope is
the whole program. We call these
global
bindings - Bindings created for function parameters or declared inside a
function can only be referenced in that function. These are known as
local
bindings. New instances of these local
bindings are
created every time the function is called - Bindings declared with
let
and const
are local to the block that
they are declared in - In pre-2015 JavaScript, only functions created new scopes. So
old-style bindings created with
var
are visible throughout the
whole function that they appear in. If not declared in a function
then scope is global
let x = 10
if (true) {
let y = 20
var z = 30
console.log(x + y + z)
}
console.log(x + z)
const halve = function (n) {
return n / 2
}
let n = 10
console.log(halve(100))
console.log(n)
Nested scope
const hummus = function (factor) {
const ingredient = function (amount, unit, name) {
let ingredientAmount = amount * factor
if (ingredientAmount > 1) {
unit += "s"
}
console.log(`${ingredientAmount} ${unit} ${name}`)
}
ingredient(1, "can", "chickpeas")
ingredient(0.25, "cup", "tahini")
ingredient(0.25, "cup", "lemon juice")
ingredient(1, "clove", "garlic")
ingredient(2, "tablespoon", "olive oil")
ingredient(0.5, "teaspoon", "cumin")
}
hummus(1)