πŸ€ κΈ°μˆ μ±… μŠ€ν„°λ””

23λ…„ 1μ›”λΆ€ν„° ν™œλ™ 쀑인 κ΅μœ‘μ—μ„œ, 뜻이 λ§žλŠ” λ™λ£Œλ“€κ³Ό ν•¨κ»˜ μ§„ν–‰ν•˜κ²Œ 된 μŠ€ν„°λ””
처음 μ½”μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ μ„œμ μ„ 읽자고 μ œμ•ˆν•˜λ©΄μ„œ μ‹œμž‘!
μ•žμœΌλ‘œλ„ κΎΈμ€€νžˆ 기술 μ„œμ μ„ 읽고 ν•¨κ»˜ λ°œμ „ν•˜λŠ” μ‹œκ°„μ΄ λ˜μ—ˆμœΌλ©΄ μ’‹κ² λ‹€!

책에 μžˆλŠ” λ‚΄μš©λ³΄λ‹¨, μ½μœΌλ©΄μ„œ 혼자 μ •λ¦¬ν•œ λ‚΄μš©λ“€ μœ„μ£Όλ‘œ μž‘μ„±ν•˜μž!

πŸ… μ½”μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 3. this

μΌμ‹œ: 2μ›” 12일 20μ‹œ


Quiz 1 p79. class의 this 생각해보기

class Test {
	constructor() {}
	
	method1() {
		console.log(this)
	}
}

const test = new Test();

test.method1(); // 1. 무엇이 좜λ ₯λ˜λ‚˜μš”? μ™œ κ·Έλ ‡κ²Œ λ κΉŒμš”?

const method2 = test.method1;

method2(); // 2. 무엇이 좜λ ₯λ˜λ‚˜μš”? μ™œ κ·Έλ ‡κ²Œ λ κΉŒμš”?

// 3. mehtod2에 λ‹€λ₯Έ thisλ₯Ό μ§€μ •ν•˜λŠ” 방법이 μžˆμ„κΉŒμš”?

μ˜ˆμƒ λ‹΅μ•ˆ

  1. test 객체
  2. undefined - ν•¨μˆ˜λ‘œμ„œ ν˜ΈμΆœν–ˆμœΌλ―€λ‘œ μ „μ—­ 객체일 것 κ°™μ§€λ§Œ, classλŠ” es6에 λ„μž…λ˜μ–΄ 기본적으둜 use strict κ°€ 적용되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
  3. call, apply, bind λ©”μ†Œλ“œ

Quiz 2 p83. 예제 3-18-(1)

// μœ„μ˜ μ½”λ“œλ₯Ό es6 μ΄ν›„μ˜ λ¬Έλ²•μœΌλ‘œ ν‘œν˜„ν•΄μ£Όμ„Έμš”!

function a() {
	var argv = Array.prototype.slice.call(arguments);
	argv.forEach(function(arg) {
		console.log(arg);
	});
}
a(1, 2, 3);

μ˜ˆμƒ λ‹΅μ•ˆ 2가지

// 1. Array.from μ‚¬μš©ν•˜κΈ°
function a() {
	var argv = Array.from(arguments);
	argv.forEach(function(arg) {
		console.log(arg);
	});
}
a(1, 2, 3);

// 2. rest parameter μ‚¬μš©ν•˜κΈ°
function a(...argv) {
	argv.forEach(arg => console.log(arg))
}
a(1, 2, 3);

Quiz 3 p87. 예제 3-25

var func = function(a, b, c) {
	console.log(a + b + c);
};
func(1, 2, 3);

// 1. bindλ₯Ό μ‚¬μš©ν•˜μ—¬ μœ„μ˜ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ₯Ό λ‚˜λˆ μ„œ λ°›λŠ” ν•¨μˆ˜λ“€λ‘œ λ‚˜λˆ μ£Όμ„Έμš”!

1. μ˜ˆμƒ λ‹΅μ•ˆ

var binding1 = func.bind(null, 1);
var binding2 = binding1.bind(null, 2);
var binding3 = binding2.bind(null, 3);

/*
binding1(2, 3); // 6
binding2(3); // 6
binding3(); // 6
*/

// 2. (μΆ”κ°€) μœ„μ˜ bindingν•¨μˆ˜λ“€μ„ λ³΄μ‹œκ³  λ– μ˜€λ₯΄μ‹œλŠ” κ°œλ…μ΄ μžˆλ‚˜μš”?(힌트: FP)

2. μ˜ˆμƒλ‹΅μ•ˆ

// μš°λ¦¬κ°€ λ°°μ› λ˜ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ `currying`이 λ– μ˜€λ₯΄μ‹œλ©΄ ν–ˆμ–΄μš”!
var currying = (a) => (b) => (c) =>{
	console.log(a + b + c);
};

var currying1 = currying(1);
var currying2 = currying1(2);

/*
currying1(2)(3); // 6
currying2(3); // 6
*/

Quiz 4 p93. κ°œλ… + p77. 예제 3-12-(2)

[1, 2, 3, 4, 5].forEach(function(x) {
	console.log(this, x);
});

// 1. μœ„μ˜ μ˜ˆμ œμ—μ„œ thisλŠ” 무엇을 가리킀고 μžˆλ‚˜μš”?
// 2. thisλ₯Ό λ°”κΎΈλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”!

1, 2. μ˜ˆμƒ λ‹΅μ•ˆ

var self = 'λ‚΄κ°€ μ§€μ •ν•œ this';
[1, 2, 3, 4, 5].forEach(function(x) {
	console.log(this, x);
}, self);

// 3. (μΆ”κ°€) μœ„μ˜ forEachκ°€ λ°›λŠ” 콜백 ν•¨μˆ˜λ₯Ό ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ μž‘μ„±ν•˜λ©΄ μ–΄λ–€ κ²°κ³Όκ°€ λ‚˜μ˜¬κΉŒμš”? 

3. μ˜ˆμƒ λ‹΅μ•ˆ

var self = 'λ‚΄κ°€ μ§€μ •ν•œ this';
[1, 2, 3, 4, 5].forEach(x => 
	console.log(this, x)
, self);

// thisκ°€ μ „μ—­ 객체λ₯Ό 가리킀고 μžˆμŠ΅λ‹ˆλ‹€. ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” λ”°λ‘œ thisλ₯Ό λ°”μΈλ”©ν•˜μ§€ μ•ŠκΈ° λ–„λ¬Έ!