15์ผ์ฐจ

JiHunยท2023๋…„ 5์›” 1์ผ

๋ถ€ํŠธ์บ ํ”„

๋ชฉ๋ก ๋ณด๊ธฐ
15/56

๐Ÿ—‚๏ธ Scope

๐Ÿ“‘ default parameter

function defaultPrice(price = 4) {
	return price
}
defaultParameter()  // 4;
defaultParameter(8) // 8;

๋งค๊ฐœ๋ณ€์ˆ˜๋„ ๋ณ€์ˆ˜๋‹ค. price๋Š” 4๋ผ๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ € ํ•จ์ˆ˜ scope์—์„œ ์“ฐ์ด๋Š” ๊ฐ’์ด๋‹ค.

๐Ÿ“‘ lexical scope

scope๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ƒ๊ธด๋‹ค.
์„ ์–ธํ•˜๋Š” ์ˆœ๊ฐ„, ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋Š” ์ž๊ธฐ ์Šค์ฝ”ํ”„๋ถ€ํ„ฐ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณณ(์ƒ์œ„ ๋ฒ”์œ„)์— ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ณ„์† ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

์Šค์ฝ”ํ”„๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฑธ ์ˆ™๋‹ฌํ•ด์•ผ๊ฒ ๋‹ค. ์–ด๋А ๊ณณ์—์„œ๋Š” ์•ˆ ์“ฐ์ด๊ณ  ์–ด๋А ๊ณณ์—์„œ ์“ฐ์ด๊ณ  ๋‚ด๋ถ€ ์Šค์ฝ”ํ”„์—์„œ ๋ณ€์ˆ˜๋ฅผ ์žฌํ• ๋‹นํ•˜๋ฉด ์™ธ๋ถ€์— ์žˆ๋˜ ๋ณ€์ˆ˜๊ฐ€ ์žฌํ• ๋‹น๋œ๋‹ค๋Š” ๊ฑธ ์กฐ์‹ฌํ•ด์•ผ๊ฒ ๋‹ค.

๐Ÿ“‘ closure

ํด๋กœ์ €๋Š” ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์–ดํœ˜์  ํ™˜๊ฒฝ์˜ ์กฐํ•ฉ์ด๋‹ค. ์ด ํ™˜๊ฒฝ์€ ํด๋กœ์ €๊ฐ€ ์ƒ์„ฑ๋œ ์‹œ์ ์˜ ์œ ํšจ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

multipeBy3๊ณผ multipleBy5 ํ•จ์ˆ˜๋Š” ํด๋กœ์ € ํ•จ์ˆ˜๋‹ค. ํ•จ์ˆ˜์˜ ์ •์˜ ๋ณธ๋ฌธ์€ ๊ณต์œ ํ•˜์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์–ดํœ˜(๋งฅ๋ฝ)์  ํ™˜๊ฒฝ์„ ์ €์žฅํ•œ๋‹ค. multipleBy3์€ multipleByAmount ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 3์œผ๋กœ ํ™˜๊ฒฝ์— ์„ธํŒ…ํ•ด ๋†“์€ ์ƒํƒœ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ MultipleBy5์€ multipleByAmount ํŒŒ๋ผ๋ฏธ๋„ˆ๋ฅผ 5๋กœ ํ™˜๊ฒฝ์— ์„ธํŒ…ํ•œ ์ƒํƒœ๋‹ค.

๐Ÿ—‚๏ธ Types

๐Ÿ“‘ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

const nums1 = [1, 2, 3];
const nums2 = [1 ,2, 3];
nums1 === nums2  // false;  nums1๊ณผ nums2 ์„œ๋กœ ์ฃผ์†Œ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค.

[1, 2, 3]  // ๋ฐ์ดํ„ฐ๊ฐ€ heap์— ์ €์žฅ๋˜์ง€๋งŒ ๋ณ€์ˆ˜ ํ• ๋‹น์ด ๋˜์ง€ ์•Š์•„ ์ฃผ์†Œ๋Š” ์–ด๋””์—๋„ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
nums1 === [1, 2, 3];   // false; ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ์— ์ €์žฅ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— false๊ฐ€ ๋œ๋‹ค.

๐Ÿ—‚๏ธ Object

๐Ÿ“‘ 'this'๋Š” method๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‹œ์ ์— ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

const cal = {
	prop:14,
  	func: function() {
    	return this.prop
	}
}
console.log(cal.func());  // 14;

this

this๋Š” class ํ‚ค์›Œ๋“œ๊ฐ€ ์—†๋˜ ์‹œ์ ˆ ์“ฐ์ด๋˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ์“ฐ์˜€๋‹ค. ์ผ๋ฐ˜ ํ•จ์ˆ˜์— new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

function Phone(brand) {
	this.brand = brand;
}

const phone = new Phone("Apple");
console.log(phone)  // Phone {brand: "Apple"}

๊ฐ์ฒด ์•ˆ์— ๊ฐ์ฒด ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์žฅ์†Œ์— ๋”ฐ๋ผ์„œ ์ž‘๋™์ด ๋‹ฌ๋ผ์ง€๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ž˜์„œ bind()๋ผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค.

const obj = {
	hi = "hello",
  	console: function() {
    	console.log(this.hi);
    },
    oneSecondLater: function() {
    	setTimeout(function() { console.log(this.hi)}, 1000)
    }
}

obj.hi  // "hello";
obj.onSecondLater // undefined;
const obj = {
	hi = "hello",
  	console: function() {
    	console.log(this.hi);
    },
    oneSecondLater: function() {
    	setTimeout(function() { console.log(this.hi)}.bind(this), 1000)
    }
`

obj.hi();   // "hello"
obj.onSecondLater() // "hello"

this ์ด๋Ÿฐ ๊ณณ์— ์“ฐ๋ฉด ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ํ˜„์žฌ๋Š” class ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ๊ตณ์ด ๋‹ค๋ฅธ ๊ณณ์—์„œ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋ ๋•Œ๋งˆ๋‹ค ๊ทธ ํ•จ์ˆ˜๋Š” "์–ด๋–ค ๊ฐ์ฒด"์˜ method์ผ ๊ฒƒ์ด๋‹ค. ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ๊ทธ "์–ด๋–ค ๊ฐ์ฒด"๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด this

๐Ÿ”ฅ๋งˆ์ง€๋ง‰์œผ๋กœ

๊ฐ์ฒด๋Š” ์‰ฌ์šด๊ฑฐ ๊ฐ™์œผ๋ฉด์„œ๋„ ํด๋กœ์ €๋‚˜ this ์š”๋Ÿฐ๊ฒŒ ๋‚˜์˜ค๋ฉด ํ•œ์ธต ์ƒ๊ฐํ•ด์งˆ๊ฒŒ ๋งŽ์•„์ง„๋‹ค. ํŠนํžˆ ๊ฐ์ฒด ๋‹ค๋ฃฐ ์ผ์ด ๋งŽ์„ ๊ฑฐ๊ฐ™์•„์„œ ๊ผผ๊ผผํžˆ ์ฝ๋Š” ์—ฐ์Šต์„ ํ•˜์ž.

profile
์•ˆ๋…•ํ•˜์„ธ์š”. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์†ก์ง€ํ›ˆ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€