๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€48

[JavaScript] ์Šค์ฝ”ํ”„ ์ฒด์ธ์ด๋ž€? ์Šค์ฝ”ํ”„๋ž€? ๋ณ€์ˆ˜(์‹๋ณ„์ž)์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋œปํ•œ๋‹ค. ์Šค์ฝ”ํ”„(Scope)๋Š” ๋ณ€์ˆ˜๊ฐ€ ์–ด๋””์„œ, ์–ด๋–ป๊ฒŒ ์„ ์–ธ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ทธ ๋ณ€์ˆ˜์˜ ์œ ํšจํ•œ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ทœ์น™์ด๊ธฐ๋„ ํ•˜๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ด ๊ทœ์น™์— ๋”ฐ๋ผ ์ฐธ์กฐ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด๋‚˜๊ฐ„๋‹ค. (→ ๊ทธ๊ฒƒ์„ Scope Chain) ๐Ÿ”—์Šค์ฝ”ํ”„์ฒด์ธ? ์ž๋ฐ”์Šค ํฌ๋ฆฝํŠธ ES2015๊ธฐ์ค€์œผ๋กœ ํ™•๋ฐ”๋€œ ์˜ˆ์ „์—” ํ•จ์ˆ˜๊ฐ€ ๊ธฐ์ค€์ด์˜€๋Š”๋ฐ ์š”์ฆ˜์—” ๋ธ”๋ก์ด ๊ธฐ์ค€์ด๋‹ค( ํ•จ์ˆ˜๋„ ๋‹คํ–‰ํžˆ ๋ธ”๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค ) ์Šค์ฝ”ํ”„ ์ฒด์ธ(Scope Chain)์€ ์ผ์ข…์˜ ๋ฆฌ์ŠคํŠธ๋กœ์„œ ์ „์—ญ ๊ฐ์ฒด์™€ ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐจ๋ก€๋กœ ์ €์žฅํ•˜๊ณ , ์˜๋ฏธ ๊ทธ๋Œ€๋กœ ๊ฐ๊ฐ์˜ ์Šค์ฝ”ํ”„๊ฐ€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ(chain)๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ์„ ๋งํ•œ๋‹ค. ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์Šค์ฝ”ํ”„๊ฐ€ scope ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ ํ•จ์ˆ˜ ๊ฐ์ฒด ๋‚ด์—์„œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ.. 2022. 11. 9.
ํด๋กœ์ €์™€ ์Šค์ฝ”ํ”„์ฒด์ธ์˜ ์ดํ•ด๋ฅผ ์œ„ํ•œ ์ฃผ์ ˆ๊ฑฐ๋ฆผ ์ƒ๊ฐ.. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„ ํ™˜๊ฒฝ์„ ๋”ฐ๋ฅธ๋‹ค๋Š”๊ฑด ์•Œ๊ณ ์žˆ๊ณ  ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„ํ™˜๊ฒฝ ์ฆ‰, ์ •์  ์Šค์ฝ”ํ”„๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด์•„๋‹Œ ์„ ์–ธ์— ์˜ํ•ด์„œ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค ๋ ‰์‹œ์ปฌ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์žฅ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์ด๋‹ค. ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„( ๋™์  ์Šค์ฝ”ํ”„ ) var x = "global"; function outer() { var x = "local"; inner(); } function inner() { console.log(x); } outer() //global inner() //global ์•„๋ž˜์™€ ๊ฐ™์ด ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๋ณ€์ˆ˜์ด๋ฉด ์ƒ๋‹จ์˜ ์™ธ๋ถ€ํ•จ์ˆ˜๋กœ ์˜ฌ๋ผ๊ฐ€ ์ฐพ๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์ „์—ญ๋ณ€์ˆ˜ ๋ฒ”์œ„๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€์„œ๋„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ๋™์  ์Šค์ฝ”ํ”„ var x = "global.. 2022. 11. 9.
[JavaScript] Scope๋ž€? ๐Ÿ‘‍๐Ÿ—จ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„(function-level scope)๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ž€ ํ•จ์ˆ˜ ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๊ณ  ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š๋‹ค(์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค)๋Š” ๊ฒƒ์ด๋‹ค. ๐Ÿ‘‰๐Ÿป๋‹จ, ECMAScript 6์—์„œ ๋„์ž…๋œ let keyword๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป Scope๋ž€? Scope๋Š” ์ง์—ญํ•˜๋ฉด "๋ฒ”์œ„"๋ผ๋Š” ๋œป์ด๋‹ค. JavaScript ์—์„œ Scope(์Šค์ฝ”ํ”„)๋Š” ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋งํ•œ๋‹ค. ์‹๋ณ„์ž(๋ณ€์ˆ˜)๋ฅผ ์ฐพ๊ธฐ์œ„ํ•œ ๊ทœ์น™์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์‹๋ณ„์ž์˜ ์œ ํšจ ๋ฒ”์œ„ ⇒ ๋ชจ๋“  ์‹๋ณ„์ž๋Š” ์ž์‹ ์ด ์„ ์–ธ๋œ ์œ„์น˜์— ์˜ํ•˜์—ฌ ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์‹๋ณ„์ž ์ž์‹ ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋จ. var x = 'global'; f.. 2022. 11. 5.
์ฝœ๋ฐฑ ํ•จ์ˆ˜(Callback) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ callback๊ณผ promise๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๋จผ์ € callback ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ž€ ํŠน์ • ์ฝ”๋“œ์˜ ์—ฐ์‚ฐ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์„ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰์‹œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋ฅผ ์œ„ํ•ด HTTP ํ†ต์‹ ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ์˜ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์•„๋ž˜์˜ ajax ํ†ต์‹  ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž function getData() { var tableData; $.get('https://domain.com/products/1', function(response) { tableData = response; }).. 2022. 11. 3.