1.extend (obj1, obj2)
λ κ°μ κ°μ²΄λ₯Ό μ λ ₯λ°μ λλ²μ§Έ κ°μ²΄μ μμ±λ€μ 첫λ²μ§Έ κ°μ²΄μ μΆκ°ν΄μΌ νλ€.
const obj1 = {
a: 1,
b: 2
};
const obj2 = {
b: 4,
c: 3
};
extend(obj1, obj2);
console.log(obj1); // --> {a: 1, b: 2, c: 3}
console.log(obj2); // --> {b: 4, c: 3}
for (let key in obj2) {
if (!(key in obj1)) { // μ΄λ°μμΌλ‘ obj1μ obj2μ keyκ°μ΄ μλμ§ νμΈνλ€.
obj1[key] = obj2[key] // μλ€λ©΄ κ·Έ μμ±μ obj1μ ν λΉνλ€.
}
}
}
2.countAllCharacters (str)
κ° ν€μ κ°μ ν΄λΉ λ¬Έμκ° λ¬Έμμ΄μμ λ±μ₯νλ νμλ₯Ό μλ―Ένλ number
νμ
μ κ°μ΄μ΄μΌ νλ€.
let output = countAllCharacters("hello blog");
console.log(output); // --> {h: 1, e: 1, l: 3, o: 2, b: 1, g: 1}
let obj = {};
for (let i = 0; i < str.length; i++) {
if (str[i] === " ") {
continue;
}
if (obj[str[i]] === undefined) {
obj[str[i]] = 0;
}
obj[str[i]]++;
}
return obj;
κ°μ²΄λ νμ€ν μ΄λ‘ 보λ€λ λ¬Έμ λ₯Ό νλ©΄μ 곡λΆλ₯Ό ν΄μΌ λ 빨리 μ΄ν΄κ° λλ κ² κ°λ€!!
μ²μμλ κ°μ²΄μ value κ°μ μ΄λ»κ² ν λΉμ΄ λλ건μ§, keyκ°μ λμ§? μ΄λ¬κ³ λ§μ΄ μ΄λ €μ νμλλ°, λμμμ΄ λ³΅μ΅νκ³ κ³μ λ¬Έμ λ₯Ό νλ€λ³΄λ μ΄λ¬ν λ¬Έμ λ€μ κ°λ³κ² νκ² λμλ€!
1.Primitive type
Primitive type, μμ μλ£νμ νμ μ λ³μμλ νλμ μμ μλ£νλ§μ λ΄μ μ μλ€.
μ¬κΈ°μ μλ°μ€ν¬λ¦½νΈμλ number, string, boolean, undefined, null, symbol, bigint κ° μλ€.
μμνμ μ μνλ κ°μ λ¨ νλμ λ°μ΄ν° κ°λ§μ κ°μ§κ³ μλ€.
κ·Έλ κΈ° λλ¬Έμ, μμ μλ£νμ μ μ₯ 곡κ°μ ν¬κΈ°λ κ³ μ μ΄λΌκ³ 보면 λλ€. κ·Έλ¦¬κ³ μ΄ μ μ₯ 곡κ°μ βCall Stackβ μ΄λΌκ³ λΆλ₯Έλ€.
let word = "hello blog!";
word = "welcome to my blog!";
// μμνμ
μΈ stringμ λ³κ²½ν μ μλ κ³ μ λ κ°μ΄μ§λ§,
// μ΄λ°μμΌλ‘ μ¬ν λΉμ νμ¬ λ³μ "word"μ λ΄κΈ΄ λ΄μ©μ λ³κ²½ν μ λ μλ€.
let str1 = "hello";
let str2 = str1;
str2 = "world";
console.log(str1); // "hello"
2.Reference type
μλ°μ€ν¬λ¦½νΈμμ μμ μλ£νμ΄ μλ λͺ¨λ κ²μ μ°Έμ‘° μλ£ν(Reference type) μ΄λΌκ³ 보면 λλ€.
λνμ μΈ κ²μ λ°°μ΄([])κ³Ό κ°μ²΄({}), ν¨μ(function(){})μ΄ μλ€.
μ°Έμ‘° μλ£νμ μμ μλ£νκ³Όλ λ¬λ¦¬ μ μ₯ 곡κ°μ μ£Όμκ°μ ν λΉνλ€. κ·Έλμ μ΄ μ μ₯ 곡κ°μ κ³ μ λ ν¬κΈ°κ° μλλΌ, λμ μΌλ‘ ν¬κΈ°κ° λ³νλ νΉλ³ν μ μ₯ 곡κ°μ μ¬μ©νλ€. μ°λ¦¬λ μ΄ μ μ₯ 곡κ°μ βheapβ μ΄λΌκ³ λΆλ₯Έλ€.
let x = { foo: 1 };
let y = x;
y.foo = 2;
console.log(x.foo); // 2
x μ {foo: 1}
λ₯Ό ν λΉνκ³ , yμλ xμ μ£Όμκ°μ ν λΉνλ€. xμ yλ κ°μ μ£Όμλ₯Ό λ°λΌλ³΄κ³ μμΌλ©°, y.fooκ° 2λ‘ λ³κ²½λμμΌλ, κ°μ κ³³μ λ°λΌλ³΄λ x.fooλ 2λ‘ λ°λκ² λλ€.
μ€μ½νλ λ³μ μ κ·Ό κ·μΉμ λ°λ₯Έ μ ν¨ λ²μ
λ³μμ κ·Έ κ°μ΄, μ΄λμλΆν° μ΄λκΉμ§ μ ν¨νμ§λ₯Ό νλ¨νλ λ²μ
JavaScriptλ κΈ°λ³Έμ μΌλ‘, ν¨μκ° μ μΈλλ(lexical) λμμ μμ λ§μ Scopeλ₯Ό κ°μ§λ€.
let git = "Hello"; // μ μ λ³μ
function welcomeToMyBlog() {
let myName = "Useong"; // μ§μ λ³μ
return git + " " + myName;
}
console.log(welcomeToMyBlog()); // 'Hello Useong'
console.log(myName); // ReferenceError
μ¬κΈ°μ git μ μ μ λ³μμ ν΄λΉνκ³ , myName μ μ§μ λ³μμ ν΄λΉνλ€.
Scopeλ μ€μ²©μ΄ κ°λ₯νλ€. μ μ λ³μλ μ΄λμλ μ κ·Όμ΄ κ°λ₯νλ€.
μ§μ λ³μλ ν¨μ λ΄μμ μ μ λ³μλ³΄λ€ λ λμ μ°μ μμλ₯Ό κ°μ§λ€.
1.μ€μ½ν λ¬Έμ
let x = 10;
function outer() {
x = 20;
function inner() {
let x;
x = x + 20;
return x;
}
inner();
}
outer();
let result = x;
console.log(outer()); // undefined
console.log(result); // 20
1.result λ μ 20 μΌκΉ ?
outer ν¨μμμ μ μ λ³μ x μ 20μ μ¬ν λΉνκΈ° λλ¬Έμ΄λ€. κ·Έλμ result μ κ°μ 20 μ΄λ€. outer λ΄λΆμμ inner ν¨μκ° νΈμΆ λκ³ μμ§λ§, inner ν¨μλ λ°κΉ₯ μ€μ½νμ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μλλ€.
2.κ·Έλ¬λ©΄ μ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μμκΉ ?
inner ν¨μμλ x λΌλ μ§μ λ³μ, μλ‘μ΄ λ³μκ° ν λΉλμ΄ μλ€. κ·Έλ κΈ° λλ¬Έμ, inner ν¨μ μμ μλ xλ λ°κΉ₯ μ€μ½νμλ μν₯μ λ―ΈμΉ μ κ° μλ€.
κ·Έλ¦¬κ³ let x;
λ μ μΈμ λμ΄μμ§λ§, ν λΉμ΄ λμ΄μμ§ μκΈ° λλ¬Έμ x μ κ°μ undefined μ΄λ€. κ·Έλ¦¬κ³ x = x + 20
μ undefined μ μ«μ 20μ λνκΈ° λλ¬Έμ NaN μ΄λΌλ κ²°κ³Όκ°μ΄ λμ¨λ€.
inner ν¨μλ NaN
μ λ°ννκ² λκ³ inner ν¨μλ₯Ό λ°ννλ outer ν¨μλ undefinedκ° λλ€. κ·Έλμ κ²°κ΅, outer() μ κ²°κ³Όκ°μ undefined μΈ μ
μ΄λ€.
ν΄λ‘μ λ μΈλΆ ν¨μμ λ³μμ μ κ·Όν μ μλ λ΄λΆ ν¨μλ₯Ό λ»νλ€. μΈλΆν¨μμ μ€νμ΄ μ’ λ£λ νμλ, ν΄λ‘μ λ μΈλΆν¨μμ μ€μ½νλ₯Ό μ°Έμ‘°ν μ μλ€.
ν΄λ‘μ μ λ¨μ : μΌλ° ν¨μμλ€λ©΄ ν¨μ μ€ν μ’ λ£ ν κ°λΉμ§ 컬λ μ (μ°Έκ³ μλ£: MDN βμλ°μ€ν¬λ¦½νΈμ λ©λͺ¨λ¦¬ κ΄λ¦¬β) λμμ΄ λμμ κ°μ²΄κ°, ν΄λ‘μ ν¨ν΄μμλ λ©λͺ¨λ¦¬ μμ λ¨μ μκ² λλ€.
μΈλΆ ν¨μ μ€μ½νκ° λ΄λΆ ν¨μμ μν΄ μΈμ λ μ§ μ°Έμ‘°λ μ μκΈ° λλ¬Έμ΄λ€. λ°λΌμ ν΄λ‘μ λ₯Ό λ¨λ°ν κ²½μ° νΌν¬λ¨Όμ€κ° μ νλ μ λ μλ€.
:point_up: κ°λΉμ§ 컬λ μ μ΄λ, μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄κ° μμ±λμμ λ μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ μΈλͺ¨ μμ΄μ‘μ λ μλμΌλ‘ ν΄μ νλ κ²μ΄λ€. κ°μ μ μΈν λ μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ€κ³ 보면 λλ€.
κ·Έλμ μλ°μ€ν¬λ¦½νΈλ κ°λΉμ§ 컬λ μ μ ν΅ν΄ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ€. κ°μ²΄κ° μ°Έμ‘° λμμ΄ μλ λ, κ°λΉμ§ 컬λ μ μ μν΄ μλμΌλ‘ λ©λͺ¨λ¦¬ ν λΉμ΄ ν΄μ λλ€.
1.μ»€λ§ (currying)
μ»€λ§ (currying) : ν¨μ νλκ° n κ°μ μΈμλ₯Ό λ°λ λμ , nκ°μ ν¨μλ₯Ό λ§λ€μ΄ κ°κ° μΈμλ₯Ό λ°κ² νλ λ°©λ²
function adder(x) {
return function (y) {
return x + y;
};
}
adder(2)(3); // 5
function htmlMaker(tag) {
let startTag = `<${tag}>`;
let endTag = `</${tag}>`;
return function (textContent) {
return startTag + textContent + endTag;
};
}
let divMaker = htmlMaker("div");
divMaker("μλ
νμΈμ");
// "<div>μλ
νμΈμ</div>"
let spanMaker = htmlMaker("span");
spanMaker("λΈλ‘κ·Έμ μ€μ κ±Έ νμν©λλ€.");
// "<span>λΈλ‘κ·Έμ μ€μ κ±Έ νμν©λλ€.</span>"
2.ν΄λ‘μ λͺ¨λ ν¨ν΄
ν΄λ‘μ λͺ¨λ ν¨ν΄ : λ³μλ₯Ό μ€μ½ν μμͺ½μ κ°λμ΄ ν¨μ λ°μΌλ‘ λ ΈμΆ μν€μ§ μλ λ°©λ²
function makeCounter() {
let privateCounter = 0;
return {
increment: function () {
privateCounter++;
},
decrement: function () {
privateCounter--;
},
getValue: function () {
return privateCounter;
}
};
}
let counter1 = makeCounter();
counter1.increment();
counter1.increment();
console.log(counter1.getValue()); // 2
3.ν΄λ‘μ λ¬Έμ
ν΄λ‘μ ν¨μμ λ¬Έμ λ₯Ό νμ΄λ³΄λ©΄μ μ΄ν΄λ₯Ό ν΄λ³΄μ! totalμ κ°μ 무μμΌκΉ?
let add = fucntion(x) {
let sum = function(y) {
return x + y;
}
return sum;
}
let foo = add(1);
foo(3);
let total = foo(6);
console.log(total) // ?
total = 7
total μ μ 7κ°μ΄ λμ¬κΉ ?
ν¨μ add λ xλ₯Ό 맀κ°λ³μλ‘ νλ©°, sumμ λ°ννλ€. μ¬κΈ°μ μ λ¬λ°μ x λ λ΄λΆν¨μ sumμ μ λ¬μ ν΄μ€λ€. μ΄λ, sum μ x + y λ₯Ό λ°ννλ©΄μ μΈλΆν¨μμΈ addμ 맀κ°λ³μ x μ μ κ·Όν μ μλ€. (ν΄λ‘μ ν¨μμ κ°λ )
κ·Έλ λ€λ©΄ fooλ add(1) μ ν λΉνκ³ , totalμ foo(6)μ ν λΉνκΈ° λλ¬Έμ, let total = foo(1)(6) κ³Ό κ°μ λ»μ΄ λλ€.
λ°λΌμ, return x + y => 1 + 6 μ΄ λκ³ 7μ λ°ννκ² λλ€.
foo(3) μ λ¬΄μ¨ μν μ ν κΉ?
foo(3) μ μ€ννκ² λλ©΄ foo(1)(3) μ΄ λμ΄ 4λΌλ κ°μ΄ λ°νλ μ λ μμ§λ§, νμ¬ foo(3)μ μ΄λμλ ν λΉμ΄ λμ΄ μμ§ μμΌλ―λ‘ total μλ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μλλ€.
π λ΄μΌμ TIW(today I Will)
git