๐ Chapter 1 : ๋ณ์ ํ ๋น์ผ๋ก ์๋๋ฅผ ํ๋ผ
๐ฏ const๋ก ๋ณํ์ง ์๋ ๊ฐ์ ํํํ๋ผ.โ
- ๋ณ์๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์
var
,let
,const
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋
const
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค. const
๋ ๊ฐ์ฅ ๋ง์ ๊ฒ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ๊ฐ์ฅ ์ ์ ๊ฒ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.const
๋ ๋ธ๋ก์ ๋ฌธ๋งฅ ๋ด์์ ์ฌํ ๋นํ ์ ์๋ ๋ณ์ ์ ์ธ์ด๋ค. ์ฆ, ํ ๋ฒ ์ ์ธํ๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค. ๊ทธ๋ ์ง๋ง ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒ, ์ฆ ๋ถ๋ณ๊ฐ์ด ๋๋ ๊ฒ์ ์๋๋ค.
// var ์ฌ์ฉ
var taxRate = 0.1;
var total = 100 + (100 + taxRate);
// 100ํ์ ์ฝ๋๋ฅผ ๊ฑด๋๋ฐ์์ต๋๋ค.
return `๊ตฌ๋งค ๊ธ์ก์ ${total}์
๋๋ค.`;
// const ์ฌ์ฉ
const taxRate = 0.1;
const total = 100 + (100 + taxRate);
// 100ํ์ ์ฝ๋๋ฅผ ๊ฑด๋๋ฐ์์ต๋๋ค.
return `๊ตฌ๋งค ๊ธ์ก์ ${total}์
๋๋ค.`;
const
๋ฅผ ์ฌ์ฉํ ๋๋total
์ด ์์์ด๋ฉฐ ์ฌํ ๋นํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ํํ๊ฒ110
์ด ๋ฐํ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.var
์ ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ฌํ ๋น์ฒ๋ผ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ฝ๋๊ฐ ์๊ธฐ ๋๋ฌธ์total
๊ฐ์ด ์ค๊ฐ์ ๋ณ๊ฒฝ๋ ์ ์๋ ์ฌ์ง๊ฐ ์๋ค.
const discountable = [];
// ์๋ต..
for(let i = 0; i < cart.length; i++){
if(cart[i].discountAvailable){
discountable.push(cart[i]);
}
}
const
์ ํ ๋น๋ ๊ฐ์ด ๋ถ๋ณ๊ฐ์ด ๋์ง ์๋๋ค๋ ๊ฒ์ด ์๋๋ค.- ๋ณ์๋ฅผ ์ฌํ ๋นํ ์๋ ์์ง๋ง, ์์ ๊ฐ์ด ๊ฐ์ ๋ฐ๊ฟ ์๋ ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ์ฝ๋๋ ์ฝ๋์ ๋ท๋ถ๋ถ์์ ์ด๋ค ๊ฐ์ ๋ณด๊ฒ ๋ ์ง ํ์ ํ ์ ์๊ธฐ์ ์กฐ์(multation)์ ํผํ๋ ๊ฒ์ด ์ต์ ์ด๋ค.
const discountable = cart.filter(item => item.discountAvailable);
๐ฏ let๊ณผ const๋ก ์ ํจ ๋ฒ์ ์ถฉ๋์ ์ค์ฌ๋ผ.โ
- ๋ณ์๋ฅผ ๋ฐ๋์ ์ฌํ ๋นํด์ผ ํ๋ ๊ฒฝ์ฐ์๋
let
์ ์ฌ์ฉํ๋ค. var
์ **์ดํ์ ์ ํจ ๋ฒ์(lexical scope)**๋ฅผ ๋ฐ๋ฅด๋ ๋ฐ๋ฉด,let
์ **๋ธ๋ก ์ ํจ ๋ฒ์(block scope)**๋ฅผ ๋ฐ๋ฅธ๋ค.- ๋ธ๋ก ๋ฐ์์๋ ๋ธ๋ก ์ ํจ ๋ฒ์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ค. (์ค๊ดํธ๋ฅผ ๋ฒ์ด๋๋ฉด ๋ณ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ๊ท์น)
function getLowesPrice(item){
var count = item.inventory;
var price = item.price;
if(item.salePrice){
var count = item.saleInventory;
if(count > 0){
price = item.salePrice;
}
}
if(count){
return price;
}
return 0;
}
- ์์ ๊ฐ์ ๊ฒฝ์ฐ์์
count
๋ฅผif
๋ฌธ ์์์๋ ์ ์ธ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กดcount
๋ณ์๊ฐ ๋ฎํ์จ์ง๋ค. let
์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ค.let
์ ๋ธ๋ก ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก ๋ธ๋ก ๋ด๋ถ์ ์ ์ธํ ๋ณ์๋ ๋ธ๋ก ์ธ๋ถ์ ์กด์ฌํ์ง ์๋๋ค.
function getLowesPrice(item){
let count = item.inventory;
let price = item.price;
if(item.salePrice){
let count = item.saleInventory;
if(count > 0){
price = item.salePrice;
}
}
if(count){
return price;
}
return 0;
}
if
๋ฌธ ์์์ ์ ์ธํcount
์ ์ถฉ๋์ด ์ผ์ด๋์ง ์๋๋ค.const
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌํ ๋นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
function getLowesPrice(item){
const count = item.inventory;
let price = item.price;
if(item.salePrice){
const saleCount = item.saleInventory;
if(saleCount > 0){
price = item.salePrice;
}
}
if(count){
return price;
}
return 0;
}
let
๊ณผconst
๋ ๊ฐ์ ์ด๋ฆ์ ๋ณ์๋ฅผ ๋ค์ ์ ์ธํ ์ ์๋ค. (TypeError
๋ฐ์)
๐ฏ ๋ธ๋ก ์ ํจ ๋ฒ์ ๋ณ์๋ก ์ ๋ณด๋ฅผ ๊ฒฉ๋ฆฌํ๋ผ.โ
for
๋ฌธ ๋๋ ๋ค๋ฅธ ๋ฐ๋ณต๋ฌธ์์let
์ ์ฌ์ฉํด ์ ํจ ๋ฒ์ ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.- ์ ์ธํ ๋ณ์๋ ์ค๊ดํธ ๋ฐ์์๋ ์ ๊ทผํ ์ ์์ง๋ง, ๋ฐ๋๋ก ํจ์ ์ธ๋ถ์ ์ ์ธํ ๋ณ์๋ ๋ธ๋ก ๋ด๋ถ์์ ์ ๊ทผํ ์ ์๋ค.
- ๋ฐ๋ฉด์ lexical ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด๋ ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ์๋ ํจ์ ๋ด๋ถ ์ด๋์๋ ์ ๊ทผํ ์ ์๋ค. ์ด ์ด์ ๋ ํธ์ด์คํ ์ด๋ผ๋ ์ปดํ์ผ ๊ณผ์ ๋๋ถ์ ๋ณ์๊ฐ ์ ์ธ๋๊ธฐ๋ ์ ์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ ์์์์ ๋์ผํ๊ฒ ํจ์ ๋ด์์ ๋ง์ง๋ง์ผ๋ก ํ ๋นํ ๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
function addClick(items){
for(var i = 0; i < items.length; i++){
items[i].onClick = function() {
return i;
};
}
return items;
}
const example = [{}, {}];
const clickSet = addClick(example);
clickSet[0].onClick(); // 2
clickSet[1].onClick(); // 2
- ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฒซ ๋ฒ์งธ ์ ํต์ ์ธ ๋ฐฉ๋ฒ์ธ ์๋ ์์๋ ํด๋ก์ (๋ค๋ฅธ ํจ์๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ํจ์ ๋ด๋ถ์์ ๋ณ์๋ฅผ ์์ฑํ๋ ๊ฒ), ๊ณ ์ฐจ ํจ์(๋ค๋ฅธ ํจ์๋ฅผ ๋ฐํํ๋ ํจ์) ์ฆ์ ์คํ ํจ์๊ฐ ์กฐํฉ๋์ด ์๋ค.
function addClick(items){
for(var i = 0; i < items.length; i++){
items[i].onClick = (function(i) {
return function() {
return i;
};
}(i));
}
return items;
}
const example = [{}, {}];
const clickSet = addClick(example);
clickSet[0].onClick(); // 0
clickSet[1].onClick(); // 1
- ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก๋
let
์ ์ฌ์ฉํ์ฌ ์์ฑํ๋ฉด ์ฝ๋๋ฅผ ์ด์์ ํ๊ฒ ๋ง๋ค์ง ์๊ณ ๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. let
์ ๋ธ๋ก ์ ํจ ๋ฒ์๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก, ๋ธ๋ก ๋ด์์ ์ ์ธํ ๋ณ์๋ ํด๋ฌ ๋ธ๋ก์์๋ง ์ ํจํ๋ค.- ๋ฐ๋ผ์ ๋ฐ๋ณต๋์ด ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ผ๋, ์ด์ ์ ์ ์ธํ ํจ์์ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
function addClick(items){
for(let i = 0; i < items.length; i++){
items[i].onClick = function() {
return i;
};
}
return items;
}
const example = [{}, {}];
const clickSet = addClick(example);
clickSet[0].onClick(); // 0
clickSet[1].onClick(); // 1
๐ฏ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด๋ก ๋ณ์๋ฅผ ์ฝ์ ์ ์๋ ๋ฌธ์์ด๋ก ๋ณํํ๋ผ.โ
- ๋ณ์๋ฅผ ์ฐ๊ฒฐํ์ง ์๊ณ ์๋ก์ด ๋ฌธ์์ด์ ๋ง๋๋ ๋ฐฉ๋ฒ
- ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
function generateLink(image, width){
const widthInt = parseInt(width, 10);
return 'https://' + getProvider() + '/' + image + '?width=' + widthInt;
}
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ฉด ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ค.
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ ์ฌ์ฉํด์ ๋ฌธ์์ด์ ์ฐ๊ฒฐํ๊ณ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํ๋ ๊ฐ๋จํ ๋ฌธ๋ฒ์ด๋ค.
function generateLink(image, width){
return `https://${getProvider()}/${image}?width=${parseInt(width, 10)}`;
}
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ ๋ ๊ฐ๊ธ์ ์ด๋ฉด ์ค๊ดํธ ๋ด๋ถ์์ ๋ง์ ๊ฒ์ ํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
- ์ฝ๋๊ฐ ํ์ ์ด์์ผ๋ก ์ด์์ ํด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ณํ์ด ํ์ํ ๊ฒฝ์ฐ์๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ์ธ๋ถ์์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ด๊ฐ์ ๋ณ์์ ํ ๋นํด ์ฌ์ฉํ๋ค.