๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒˆ 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)}`;
}
  • ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€๊ธ‰์ ์ด๋ฉด ์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€์—์„œ ๋งŽ์€ ๊ฒƒ์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ํ•„์š” ์ด์ƒ์œผ๋กœ ์–ด์ˆ˜์„ ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ์™ธ๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ด๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด ์‚ฌ์šฉํ•œ๋‹ค.