Dream🐰ng
article thumbnail

 

μ›μ‹œ μžλ£Œν˜•κ³Ό μ°Έμ‘° μžλ£Œν˜•


✏️ μ›μ‹œ μžλ£Œν˜•

μ›μ‹œ μžλ£Œν˜•μ΄λž€? 객체가 μ•„λ‹ˆλ©΄μ„œ methodλ₯Ό κ°€μ§€μ§€ μ•ŠλŠ” μžλ£Œν˜•μœΌλ‘œ λ³€μˆ˜μ— ν•˜λ‚˜μ˜ λ°μ΄ν„°λ§Œ μ €μž₯ν•  수 있고 ν•΄λ‹Ή λ°μ΄ν„°λŠ” κ°’ μžμ²΄μ΄λ‹€.

μ›μ‹œ μžλ£Œν˜• μ’…λ₯˜ 6κ°€μ§€
string, number, bigint, boolean, undefined, symbol, (null)

 

"hello world!"
"hello september!"
// "hello world"와 "hello september!"은 λͺ¨λ‘ λ³€κ²½ν•  수 μ—†λŠ” κ³ μ •λœ 값이닀.

let word = "hello world!"
word = "hello september!"
// wordλΌλŠ” λ³€μˆ˜μ— μž¬ν• λ‹Ήμ„ ν•˜μ—¬ λ³€μˆ˜μ— λ‹΄κΈ΄ λ‚΄μš©μ„ λ³€κ²½ν•˜λŠ” 것은 κ°€λŠ₯ν•˜λ‹€.

 

✏️ μ°Έμ‘° μžλ£Œν˜•

μ°Έμ‘° μžλ£Œν˜•μ΄λž€? μ›μ‹œ μžλ£Œν˜•μ΄ μ•„λ‹Œ λͺ¨λ“  κ²ƒμœΌλ‘œ, μ—¬λŸ¬ 개의 데이터λ₯Ό 담을 수 μžˆλ‹€. λ³€μˆ˜μ— λ°μ΄ν„°μ˜ μ£Όμ†Œκ°€ λ‹΄κΈ°κ³  λ°μ΄ν„°λŠ” heapμ΄λΌλŠ” λ³„λ„μ˜ 곡간에 μ €μž₯λœλ‹€.

μ°Έμ‘° μžλ£Œν˜• μ’…λ₯˜
λ°°μ—΄([]), 객체({}), ν•¨μˆ˜(function () {})

 

 

μŠ€μ½”ν”„


μŠ€μ½”ν”„λž€? ν˜„μž¬ μ‹€ν–‰λ˜λŠ” μ»¨ν…μŠ€νŠΈλ‘œ, λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„λ₯Ό λ§ν•œλ‹€.

 

✏️ μŠ€μ½”ν”„μ˜ νŠΉμ§•

λ°”κΉ₯ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ•ˆ μŠ€μ½”ν”„μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜κ³  μ•ˆ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ°”κΉ₯ μŠ€μ½”ν”„μ—μ„œ μ‚¬μš© λΆˆκ°€λŠ₯ν•˜λ‹€.

1. μ•ˆμ—μ„œ λ°”κΉ₯ μŠ€μ½”ν”„λ‘œ 접근이 κ°€λŠ₯ν•˜λ‚˜ λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯ν•˜λ‹€.
2. μŠ€μ½”ν”„λŠ” 쀑첩이 κ°€λŠ₯ν•˜λ‹€.
3. κ°€μž₯ λ°”κΉ₯ μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„(Global Scope), κ·Έ μ™ΈλŠ” μ§€μ—­ μŠ€μ½”ν”„(Local Scope)라고 ν•œλ‹€.
4. μ§€μ—­ μŠ€μ½”ν”„μ— μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ§€μ—­ λ³€μˆ˜, μ „μ—­ μŠ€μ½”ν”„μ— μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜λΌ ν•˜λŠ”λ° μ§€μ—­λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜λ³΄λ‹€ 높은 μš°μ„ μˆœμœ„λ₯Ό κ°€μ§„λ‹€.
let username = 'sonsubin';
if (username) {
    let message = `Hello, ${username}!`;
    console.log(message); // 'Hello, sonsubin!'
}

console.log(message); // Uncaught ReferenceError: message is not defined
// messageλΌλŠ” λ³€μˆ˜κ°€ μ•ˆ μŠ€μ½”ν”„μ— μ„ μ–Έλ˜μ–΄ μžˆμœΌλ―€λ‘œ λ°”κΉ₯ μŠ€μ½”ν”„μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λ‹€.
let name = 'μ†μˆ˜λΉˆ'; // μ „μ—­ λ³€μˆ˜

function showName() {
    let name = '홍길동'; // μ§€μ—­ λ³€μˆ˜
    console.log(name);
}

console.log(name); // 'μ†μˆ˜λΉˆ'
showName(); // '홍길동'
console.log(name); // 'μ†μˆ˜λΉˆ'
// 9번째 μ€„μ˜ μ§€μ—­ λ³€μˆ˜κ°€ μ „μ—­ λ³€μˆ˜λ³΄λ‹€ μš°μ„ μˆœμœ„κ°€ λ†’κΈ° λ•Œλ¬Έμ— 'μ†μˆ˜λΉˆ'보닀 '홍길동'이 λ¨Όμ € 좜λ ₯λœλ‹€.

 

✏️ μŠ€μ½”ν”„μ˜ μ’…λ₯˜

  • 블둝 μŠ€μ½”ν”„(Block Scpoe) : μ€‘κ΄„ν˜Έμ™€ ν™”μ‚΄ν‘œλ‘œ λ‘˜λŸ¬μ‹Ό λ²”μœ„μ΄λ‹€. ν™”μ‚΄ν‘œλ‘œ λ‘˜λŸ¬μ‹Ό λ²”μœ„λ„ 블둝 μŠ€μ½”ν”„μ΄λ―€λ‘œ ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” ν•¨μˆ˜ μŠ€μ½”ν”„κ°€ μ•„λ‹Œ 블둝 μŠ€μ½”ν”„μ΄λ‹€.
  • ν•¨μˆ˜ μŠ€μ½”ν”„(Function Scope) : ν•¨μˆ˜(function)둜 λ‘˜λŸ¬μ‹Ό λ²”μœ„μ΄λ‹€.

 

λ³€μˆ˜ 선언에 λ”°λ₯Έ μŠ€μ½”ν”„ 유효 λ²”μœ„

  let const var
유효 λ²”μœ„ 블둝 μŠ€μ½”ν”„ 및 ν•¨μˆ˜ μŠ€μ½”ν”„ 블둝 μŠ€μ½”ν”„ 및 ν•¨μˆ˜ μŠ€μ½”ν”„ ν•¨μˆ˜ μŠ€μ½”ν”„
κ°’μ˜ μž¬ν• λ‹Ή O X O
λ³€μˆ˜μ˜ μž¬μ„ μ–Έ X X O

 

μ„ μ–Έ μ—†λŠ” λ³€μˆ˜ 할당을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ Sctric Modeλ₯Ό μ μš©ν•˜λ©΄ λ³€μˆ˜μ˜ 선언이 없이 값을 ν• λ‹Ήν–ˆμ„ λ•Œ μ—λŸ¬λ‘œ νŒλ‹¨ν•œλ‹€.
Strict Modeλ₯Ό μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” js 파일 상단에 'use strict';λ₯Ό μž…λ ₯ν•˜λ©΄ λœλ‹€.

 

 

ν΄λ‘œμ €


ν΄λ‘œμ €λž€? ν•¨μˆ˜μ™€ ν•¨μˆ˜κ°€ μ„ μ–Έλœ μ–΄νœ˜μ  ν™˜κ²½μ˜ μ‘°ν•©μœΌλ‘œ μ™ΈλΆ€ ν•¨μˆ˜μ— λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ–΄ 있고, 이 λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ‚΄λΆ€ ν•¨μˆ˜λ₯Ό ν΄λ‘œμ €λΌκ³  ν•œλ‹€.

// const adder = x => y => x + y;
const adder = function(x) {
    return function(y) {
        return x + y;
    }
}

 

✏️ ν΄λ‘œμ €μ˜ νŠΉμ§•

  • μ™ΈλΆ€ ν•¨μˆ˜μ˜ 리턴값이 ν•¨μˆ˜μ˜ ν˜•νƒœμ΄λ‹€.
  • λ‚΄λΆ€ ν•¨μˆ˜λŠ” μ™ΈλΆ€ ν•¨μˆ˜μ— μ„ μ–Έλœ λ³€μˆ˜μ— 접근이 κ°€λŠ₯ν•˜λ‹€.
// const adder = x => y => x + y;
const adder = function(x) {
    return function(y) {
        return x + y;
    }
}

typeof adder(4); // 'function' : 리턴값이 ν•¨μˆ˜μ΄λ‹€.
adder(4); // y = 4 + y : λ‚΄λΆ€ ν•¨μˆ˜λŠ” μ™ΈλΆ€ ν•¨μˆ˜μ— μ„ μ–Έλœ λ³€μˆ˜μ— 접근이 κ°€λŠ₯ν•˜λ‹€.

 

✏️ ν΄λ‘œμ €μ˜ ν™œμš©

  • 데이터λ₯Ό λ³΄μ‘΄ν•˜λŠ” ν•¨μˆ˜ : μ™ΈλΆ€ ν•¨μˆ˜μ˜ 싀행이 λλ‚˜λ„ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜κ°€ λ©”λͺ¨λ¦¬ 상에 μ €μž₯λœλ‹€.
// const adder = x => y => x + y;
const adder = function(x) {
    return function(y) {
        return x + y;
    }
}

const add4 = adder(4);
add4(8); // 12
add4(12); // 16
// ν•¨μˆ˜μ˜ 싀행이 λλ‚˜λ„ 4λΌλŠ” 값이 μ €μž₯λΌμžˆμœΌλ―€λ‘œ 4+8=12와 4+12=16이 κ²°κ³Όκ°’μœΌλ‘œ 좜λ ₯λœλ‹€.
// HTML λ¬Έμžμ—΄ 생성기
const tagMaker = tag => content => `<${tag}>${content}</${tag}>`;

const divMaker = tagMaker('div');
divMaker('hello'); // '<div>hello</div>'
divMaker('kakao'); // '<div>kakao</div>'

const anchorMaker = tagMaker('a');
anchorMaker('go'); // '<a>go</a>'
anchorMaker('tistory'); // '<a>tistory</a>'
  • μ •λ³΄μ˜ μ ‘κ·Ό μ œν•œ(μΊ‘μŠν™”) : μ„ μ–Έν•œ ν•¨μˆ˜λ₯Ό λ°”κΎΈμ§€ μ•Šκ³  ν•¨μˆ˜ λ‚΄λΆ€μ˜ λ³€μˆ˜μ— μƒˆ 값을 ν• λ‹Ήν•  수 μ—†λ‹€.
const makeCounter = () => {
    let value = 0;
    return {
        increase: () => {
            value = value + 1
        },
        decrease: () => {
            value = value - 1
        },
        getValue: () => value
    }
}

const counter1 = makeCounter(); // makeCounter ν•¨μˆ˜λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  value에 μƒˆ 값을 ν• λ‹Ήν•  수 μ—†λ‹€.
counter1; // { increase: f, decrease: f, getValue: f }
  • λͺ¨λ“ˆν™” : ν•¨μˆ˜μ˜ μž¬μ‚¬μš©μ„±μ„ κ·ΉλŒ€ν™”ν•˜μ—¬ ν•¨μˆ˜ ν•˜λ‚˜λ₯Ό μ™„μ „νžˆ 독립적인 λΆ€ν’ˆ ν˜•νƒœλ‘œ λΆ„λ¦¬ν•œλ‹€.
const counter1 = makeCounter();
counter1.increase();
counter1.increase();
counter1.decrease();
counter1.getValue(); // 1

const counter2 = makerCounter();
counter2.decrease();
counter2.decrease();
counter2.decrease();
counter2.getValue(); // -3
// counter1κ³Ό counter2λŠ” λ…λ¦½μ μœΌλ‘œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— 각각 초기 value의 값을 0으둜 κ°€μ§„λ‹€.

 

 

ES6 μ£Όμš” 문법


✏️ spread/rest 문법

  • spread 문법 : 주둜 배열을 ν’€μ–΄μ„œ 인자둜 μ „λ‹¬ν•˜κ±°λ‚˜, 각각의 μš”μ†Œλ‘œ 넣을 λ•Œ μ‚¬μš©ν•œλ‹€.
function sum(x, y, z) {
    return x + y + z;
}

const numbers = [1, 2, 3];
sum(...numbers); // 6
// numbers 배열에 μžˆλŠ” 값을 λͺ¨λ‘ ν’€μ–΄μ„œ 인자둜 μ „λ‹¬ν•˜μ—¬ 1 + 2 + 3이 성립
  • rest 문법 : νŒŒλΌλ―Έν„°λ₯Ό λ°°μ—΄μ˜ ν˜•νƒœλ‘œ λ°›μ•„μ„œ μ‚¬μš©ν•œλ‹€. νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜κ°€ μœ λ™μ μΌ λ•Œ μœ μš©ν•˜λ‹€.
function add(...rest) {
    let sum = 0;
    for (let i of rest) {
        sum += i;
    }
    return sum;
}

add(1, 2, 3); // 6
// 1, 2, 3을 λ°°μ—΄λ‘œ λ§Œλ“€μ–΄ for문에 μ „λ‹¬ν•˜λ―€λ‘œ 1 + 2 + 3이 성립

 

spread 문법이 기쑴에 μžˆλŠ” 배열을 펼쳐 μ‚¬μš©ν•œλ‹€λ©΄ rest 문법은 배열이 μ•„λ‹Œ 것을 λ°°μ—΄λ‘œ λ§Œλ“€μ–΄μ€€λ‹€.

 

✏️ spread/rest 문법 ν™œμš©

  • λ°°μ—΄ ν•©μΉ˜κΈ°
let parts = ['shoulders', 'knee'];
let lyrics = ['head', ...parts, 'and', 'toes'];

console.log(lyrics); // [ 'head', 'shoulders', 'knee', 'and', 'toes' ]
let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
arr1 = [...arr1, ...arr2]; // spread 문법은 immutableν•˜λ‹€.

console.log(arr1); // [ 0, 1, 2, 3, 4, 5 ]
  • λ°°μ—΄ 볡사
let arr1 = [1, 2, 3];
let arr2 = [...arr1];
arr2.push(4);

console.log(arr1); // [ 1, 2, 3 ]
console.log(arr2); // [ 1, 2, 3, 4 ]
  • κ°μ²΄μ—μ„œ μ‚¬μš©
let obj1 = {foo: 'bar', x: 42};
let obj2 = {foo: 'baz', y: 13};

let clonedObj = {...obj1};
let mergedObj = {...obj1, ...obj2};

console.log(clonedObj); // { foo: 'bar', x: 42 }
console.log(mergedObj); // { foo: 'baz', x: 42, y: 13 }
  • ν•¨μˆ˜μ—μ„œ νŒŒλΌλ―Έν„° λ°›μ•„μ˜€κΈ°
function myFun(a, b, ...manyMoreArgs) {
    console.log("a ", a);
    console.log("b ", b);
    console.log("manyMoreArgs ", manyMoreArgs);
}

myFun("one", "two", "three", "four", "five", "six");
// a one
// b two
// manyMoreArgs [ 'three', 'four', 'five', 'six' ]

'🐢 FE 41κΈ° > Review' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[S2U1] JavaScript κ³ μ°¨ ν•¨μˆ˜  (0) 2022.09.20
[S1U11] JS/λΈŒλΌμš°μ € DOM  (0) 2022.09.14
[S1U9] JavaScript λ°°μ—΄, 객체  (0) 2022.09.05
[S1U8] Linux/Git 기초  (0) 2022.09.01
[U1S6] HTML/CSS ν™œμš©  (0) 2022.08.29
profile

Dream🐰ng

@shoupeach

🐰 Happy new rabbit! 🐰

profile on loading

Loading...