๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Daily/Today I Learned

210112_TIL (this์‘์šฉ - call, apply, bind ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ)

by joooing 2021. 1. 13.
๋ฐ˜์‘ํ˜•

๐ŸŽ ์˜ค๋Š˜ ํ•œ ์ผ


โœ”๏ธ call, apply, bind ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ
this ๊ฐ’์„ ์ง€์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์ธ call, apply, bind ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ง€ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๋ฐฐ์› ๋‹ค. ๋‹จ์ง€ this๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Spread Opeator์„ ๋Œ€์‹ ํ•ด์„œ๋„ ์“ธ ์ˆ˜ ์žˆ๊ณ , ๋ฐฐ์—ด์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐํƒ€์ž…์— ๋ฐฐ์—ด๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•˜๋Š” ๋†€๋ผ์šด ์ผ๊นŒ์ง€ ๊ฐ€๋Šฅํ–ˆ๋‹ค. ํŠนํžˆ bind๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ด๋ฒคํŠธ ๊ฐ์ฒด ๋Œ€์‹  ๋‹ค๋ฅธ ๊ฐ’๋„ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์ „์— ๋งŒ๋“  ํŠธ์œ„ํ‹€๋Ÿฌ์— ์ ์šฉํ•ด๋ณด๋ ค ํ•œ๋‹ค. ์ž˜ ์•Œ์•„๋‘”๋‹ค๋ฉด ๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ ๊ฒƒ ๊ฐ™์•„์„œ ๋˜ ์–ด๋””์— ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š”์ง€๋„ ๋” ์•Œ์•„๋ณด๊ณ , ๊ผญ ๋‚ด์ผ ๋ธ”๋กœ๊น…์„ ํ•ด๋‘ฌ์•ผ๊ฒ ๋‹ค..

โœ”๏ธ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด this์˜ ๋ณ€ํ™” ์•Œ์•„๋ณด๊ธฐ
this๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๊ฒฐ์ •๋˜๋Š”๋ฐ, ์ด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋‹ค์–‘ํ•ด์„œ ๋ง๋กœ ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์™€๋‹ฟ์ง€ ์•Š์•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ „์—ญ์ด๋‚˜ ํ•จ์ˆ˜๋กœ ๋ถˆ๋ ธ์„ ๋•Œ this๋Š” ์ „์—ญ๊ฐ์ฒด๊ฐ€ ๋˜์ง€๋งŒ, ๋ฉ”์„œ๋“œ๋‚˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ ๋˜์—ˆ์„ ๋•Œ๋Š” ํ˜ธ์ถœ ์ฃผ์ฒด๊ฐ€ this๊ฐ€ ๋œ๋‹ค. ๋˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋ฉด ์ƒˆ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๊ฐ€ this๊ฐ€ ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์ด์—ˆ๋Š”๋ฐ koans ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ์˜ this๊ฐ’๋“ค์„ ๋น„๊ตํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

โœ”๏ธ  ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๊ฐœ๋… ์ •๋ฆฌ
this์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ์–ธ๊ธ‰๋˜์–ด์„œ ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ํด๋กœ์ €, ์Šค์ฝ”ํ”„, ํ˜ธ์ด์ŠคํŒ…, this ๋“ฑ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์› ๋˜ Javascript์˜ ํ•„์ˆ˜์ ์ธ ๊ฐœ๋…๋“ค์„ ์ดํ•ดํ•˜๋Š” ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๊ฐœ๋…์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋•๋ถ„์— ํ˜ธ์ด์ŠคํŒ…์˜ '๋Œ์–ด์˜ฌ๋ฆฌ๋Š”' ๋™์ž‘์ด ์ •ํ™•ํžˆ ์–ด๋–ค ์›๋ฆฌ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋Š” ์ง€๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๐ŸŽ๊ธฐ์–ตํ•  ๊ฒƒ


โœ”๏ธ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” this๊ฐ’
์ „์—ญ ๋ณ€์ˆ˜ : ์ „์—ญ ๊ฐ์ฒด
ํ•จ์ˆ˜ ํ˜ธ์ถœ : ์ „์—ญ ๊ฐ์ฒด
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ : ํ˜ธ์ถœ ์ฃผ์ฒด (๋ฉ”์„œ๋“œ๋ช… ์•ž ๊ฐ์ฒด)
์ฝœ๋ฐฑ ํ•จ์ˆ˜ : ํ˜ธ์ถœ ์ฃผ์ฒด (์ œ์–ด๊ถŒ ๊ฐ€์ง„ ํ•จ์ˆ˜, ์ •์˜X์‹œ ์ „์—ญ ๊ฐ์ฒด)
์ƒ์„ฑ์ž ํ•จ์ˆ˜ : ์ƒˆ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด
call, apply ํ˜ธ์ถœ : ์ฒซ ์ธ์ž

โœ”๏ธ setTimeout๊ณผ this
setTimeout์€ ํ•ญ์ƒ this๋กœ window๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ๋‹ค!

โœ”๏ธ ํ™”์‚ดํ‘œํ•จ์ˆ˜(=>)์™€ this
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ์‹œ this ๋ฐ”์ธ๋”ฉ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ์ ‘๊ทผ ์‹œ ์Šค์ฝ”ํ”„ ์ฒด์ธ์ƒ์—์„œ ์ž์‹ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด this์— ์ ‘๊ทผํ•œ๋‹ค.

โœ”๏ธ NVM ๋ฒ„์ „ ์ด๋™ ์‰ฝ๊ฒŒํ•˜๊ธฐ
nvm run (๋ฒ„์ „) (ํŒŒ์ผ๋ช…) ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด nvm use ์—†์ด ๋ฐ”๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค! ๋ฒ„์ „์„ ์•„์˜ˆ ๋ณ€๊ฒฝํ•˜๋Š”๊ฑด ์•„๋‹ˆ๊ณ  ํ”„๋กฌํ”„ํŠธ๋งŒ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

โœ”๏ธ ๋ฌธ์ž์—ด์— call, apply ์ ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ
 ๋ฌธ์ž์—ด๋„ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— call, apply๋ฉ”์„œ๋“œ๋กœ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋“ค์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ length ์†์„ฑ์ด ์ฝ๊ธฐ์ „์šฉ์ด๋ผ ์›๋ณธ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” push, pop, shift, unshift, splice๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  concat์ฒ˜๋Ÿผ ๋ฐฐ์—ด๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•˜๋ฉด ์—๋Ÿฌ๋Š” ์•ˆ๋‚˜์ง€๋งŒ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅธ ์ด์ƒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค.

 

๐ŸŽ ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ


โœ”๏ธ ํŠธ์œ„ํ‹€๋Ÿฌ์— bind ๋ฉ”์„œ๋“œ ์ ์šฉ
bind ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ฒคํŠธ ๊ฐ์ฒด ๋ง๊ณ  ๋‹ค๋ฅธ ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์„œ, ์ „์— ๋งŒ๋“ค์—ˆ๋˜ ํŠธ์œ„ํ‹€๋Ÿฌ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฒ„ํŠผ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์›๋ž˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ๊ฐ’๋“ค์„ ์ „๋‹ฌํ–ˆ์—ˆ๋Š”๋ฐ, ๋ฐ˜๋ณต๋ฌธ ๋Œ€์‹ ์— bind๋ฅผ ์จ์„œ ๊ณ ์ณ๋ณด๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.

โœ”๏ธ module.exports์™€ global์˜ ์ฐจ์ด
โœ”๏ธ this ๋ธ”๋กœ๊น… ๋งˆ๋ฌด๋ฆฌ
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€