mirror of
https://github.com/alrayyes/wiki.git
synced 2024-11-22 19:46:23 +00:00
64 lines
1.6 KiB
Markdown
64 lines
1.6 KiB
Markdown
---
|
|
id: 40bc3b60-ab05-4ff6-a258-f5cb38322c77
|
|
title: Bindings and scopes in JavaScript
|
|
---
|
|
|
|
# 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`
|
|
|
|
``` javascript
|
|
let x = 10
|
|
if (true) {
|
|
let y = 20
|
|
var z = 30
|
|
console.log(x + y + z)
|
|
}
|
|
|
|
// y is not accessable here
|
|
console.log(x + z)
|
|
```
|
|
|
|
``` javascript
|
|
const halve = function(n) {
|
|
return n / 2
|
|
}
|
|
|
|
let n = 10
|
|
|
|
console.log(halve(100))
|
|
console.log(n)
|
|
```
|
|
|
|
# Nested scope
|
|
|
|
``` javascript
|
|
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)
|
|
```
|