220822(์)
๐ชด ์ฑ์ฅ์ผ์ง
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐ณ ํค์๋ ์ต๋ํ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ, ์ถํ์ ๋ณด๋ฉด์ ์ค์ค๋ก ์ค๋ช
JavaScript
๋ฐ์ดํฐ ํ์
(remind)
- ์์ํ: ์ซ์ํ, ๋ฌธ์ํ, ๋ถ๋ฆฐํ, null, undefined, Symbol
- ์ฐธ์กฐํ: Object(๊ฐ์ฒด)
์์ํ์ ๋ถ๋ณ์ฑ: ๋ฐ์ดํฐ ์์ญ์์ ํ๋ฒ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๊ฐ ์์ฒด๋ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ
์ฐธ์กฐํ์ ๊ฐ๋ณ์ฑ: ๊ฐ์ฒด ๋ด์ ํ๋กํผํฐ(๋ณ์) ์์ญ์ ์ฐธ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ์ ์ฃผ์๊ฐ ๋ฐ๋ ์ ์๊ธฐ ๋๋ฌธ
๋ถ๋ณ๊ฐ์ฒด: ๊ฐ์ฒด์ด๋ฉด์ ๋ถ๋ณ์ฑ์ ๊ฐ๊ฒ ํ๋ ๋ฐฉ๋ฒ, ์ฆ ๋ณต์ฌํ์์ ๋ ๊น์ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐฉ๋ฒ
var cloneDeep = function (target) {
result = {};
if (typeof target === 'targetect' && target !== null) {
for (var prop in target) {
result[prop] = cloneDeep(target[prop]);
}
} else {
result = target;
}
return result;
};
JavaScript
์คํ ์ปจํ
์คํธ(remind)
์คํ ์ปจํ ์คํธ: ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ํ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด๋ก, ํจ์๊ฐ ํธ์ถ๋ ๋ ๋ง๋ค์ด์ง๋ค.
- VariableEnvironment
- EnvironmentRecord(์ด๊ธฐ๊ฐ)
- OuterEnvironmentReference(์ด๊ธฐ๊ฐ)
- LexicalEnvironment
- EnvironmentRecord
- OuterEnvironmentReference
- Thisbinding
EnvironmentRecord: ํธ์ด์คํ ๊ณผ ๊ด๋ จ OuterEnvironmentReference: ์ค์ฝํ ์ฒด์ด๋๊ณผ ๊ด๋ จ
JavaScript
This(remind)
This: ํน์ ์คํ ์ปจํ ์คํธ๊ฐ ํ์ฑ๋ ๋, ํน์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํน๋ณํ ๊ฐ์ฒด
๊ทธ๋ฅ ํจ์๋ก์ ํธ์ถ๋ ๋๋ ์ ์ญ๊ฐ์ฒด(window)๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ์ด๋ค ๊ฐ์ฒด์ ๋ฉ์๋๋ก์ ํธ์ถ๋ ๋๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
๋ํ, ์์ฑ์ ํจ์์์ ์ธ์คํด์ค๋ฅผ ํ์ฑ ์ ํด๋น ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํด
์ฝ๋ฐฑํจ์์์๋ ์ฝ๋ฐฑํจ์๋ง๋ค ์ง์ ํ๋ this๊ฐ ์ ๊ฐ๊ฐ
ํน์ ๊ฐ์ฒด๋ฅผ this๋ก ์ง์ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ call, apply, bind
๊ฐ ์์
ES6์์ ์ถ๊ฐ๋ ํ์ดํ ํจ์๋ ํจ์๋ฅผ ํธ์ถ ์ this binding ๊ณผ์ ์ด ๋น ์ ธ์์
var obj = {
name: 'jay',
do: function () {
console.log(this);
var arrow = () => {
console.log(this);
};
arrow(); // ํจ์๋ก์ ํธ์ถํ์์๋ this๊ฐ window๊ฐ ์๋ obj๋ฅผ ๊ฐ๋ฆฌํด(์ค์ฝํ ์ฒด์ด๋์ฒ๋ผ)
},
};
JavaScript
์ฝ๋ฐฑํจ์(remind)
์ฝ๋ฐฑํจ์: ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์์ฉํ๋ ํจ์๋ก ๊ทธ ์ ์ด๊ถ์ ํน์ ํจ์์๊ฒ ๋๊ธฐ๊ฒ ๋จ
๋ณดํต ๋น๋๊ธฐ ํจ์๊ฐ ์ฝ๋ฐฑํจ์๋ฅผ ์ธ์๋ก ๋ฐ์ ex) setTimeout, addEventListener ๋ฑ
๐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ด๋ จ ์๊ฐํด๋ณด๋ฉด ์ข์ ์ฌํญ
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ฐ๋ ๋๋ก ๋๊ธฐ์ฒ๋ฆฌ๋ง ๊ฐ๋ฅํ๋ฐ ์ด๋ป๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊น?
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ๋์๊ฐ๋ ํ๊ฒฝ(Web, Node ๋ฑ๋ฑ)์์ ์ ๊ณตํ๋ API๋ค์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํ ์ผ์ ์กฐ๊ฑด์ ๋ฐ๋ผ Task Queue๋ก ์ฝ๋ฐฑํจ์๊ฐ ์ด๋ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ ์คํ์ด ๋ชจ๋ ๋น์ด์ก์ ๋ ์ด๋ฒคํธ๋ฃจํ๊ฐ ํ ์คํฌ ํ์ ํจ์๋ฅผ ์ฝ ์คํ์ผ๋ก ๋๊ฒจ์ฃผ์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
JavaScript
ํด๋ก์ (remind)
ํด๋ก์ : ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ๋ด๋ถํจ์๊ฐ ์ธ๋ถ๋ก ์ ๋ฌ
๋์ด ํธ์ถ๋ ๋, ๊ทธ ๋ณ์๊ฐ G.C(Garbage Collector)์ ์ํด ์๊ฑฐ๋์ง ์๊ณ ๋จ์์๊ฒ ๋๋ ํ์
์ธ๋ถ๋ก ์ ๋ฌ
: return ๋ฟ๋ง ์๋๋ผ ๋น๋๊ธฐ ํจ์ ๋ฑ์ ํตํ ์ฝ๋ฐฑํจ์ ์ ๋ฌ ๋ํ ํฌํจ๋๋ค.
ํด๋ก์ ๋ ํ๋์ ํ์์ด์ง๋ง, ์๊ฑฐ๋์ด์ผํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ๋จ์์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ฃผ๋ ๊ฒ๋ ํ์ํฉ๋๋ค.
๋ํ์ ์ธ ๊ณ ์ฐจํจ์(ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ํจ์๋ฅผ ๋ฆฌํดํ๋ ํจ์)๋ฅผ ์ด์ฉํ ํด๋ก์ ํ์ฉ๋ฒ
var outer = function (value) {
return function () {
console.log(value + 'hi, there'); // return๋๋ ํจ์๊ฐ outer์ value๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก ํด๋ก์ ํ์
};
};
ํด๋ก์ ํ์ฉ
- ์ ๊ทผ ๊ถํ ์ ์ด(์ ๋ณด ์๋)
// ์ง์ a, b, c์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์(๋ณด์ ๊ฐํ)
var security = function () {
var a = 123;
var b = 234;
var c = 345;
return {
a_ref: a + 111;
b_ref: b + 222;
c_ref: c + 333;
}
}
- ๋ถ๋ถ ์ ์ฉ ํจ์
- ์ปค๋ง ํจ์
var curry = function (func) {
return function (a) {
return function (b) {
return function (c) {
return func(a, b, c);
};
};
};
};
var curryArrow = (func) => (a) => (b) => (c) => func(a, b, c);