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

๐Ÿ“ฐ ์–ธ์–ด/JS

์Šค์ฝ”ํ”„(1)

์ฑ… <๋Ÿฌ๋‹์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ>๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๋ฐฐ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • 1. ์Šค์ฝ”ํ”„
  • 2. ์Šค์ฝ”ํ”„ ์ฒด์ธ
  • 3. ๋ณ€์ˆ˜ ์ˆจ๊ธฐ๋Š” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€
  • 4. ํด๋กœ์ ธ

 

<์Šค์ฝ”ํ”„>

1. ์Šค์ฝ”ํ”„ : ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„(์–ด๋””๊นŒ์ง€ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ๊ฐ€)

1-1) ์Šค์ฝ”ํ”„์˜ ์ข…๋ฅ˜

  • ์ „์—ญ ์Šค์ฝ”ํ”„ : ์ฝ”๋“œ ์–ด๋””์—์„œ๋“  ์ฐธ์กฐ ๊ฐ€๋Šฅ(๋‚จ์šฉx, ์˜์กดx)
  • ์ง€์—ญ ์Šค์ฝ”ํ”„ : ํ•จ์ˆ˜ ์ฝ”๋“œ ๋ธ”๋ก์ด ๋งŒ๋“  ์Šค์ฝ”ํ”„๋กœ ํ•จ์ˆ˜ ์ž์‹ ๊ณผ ํ•˜์œ„ ํ•จ์ˆ˜์—์„œ๋งŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ : ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ด๋ฉฐ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์ „์—ญ ๋ณ€์ˆ˜
  • ๋ธ”๋ก ์Šค์ฝ”ํ”„ : ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜. len๊ณผ const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ทธ ๋ณ€์ˆ˜๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ์•„๋ฌด ๋ธ”๋ก์˜ ์Šค์ฝ”ํ”„์— ์†ํ•จ.

 

1-2) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์Šค์ฝ”ํ”„์˜ ํŠน์ง•

  • ํ•จ์ˆ˜ ๋‹จ์œ„์˜ ์œ ํšจ๋ฒ”์œ„ : if๋ฌธ, for๋ฌธ ๋“ฑ ๊ตฌ๋ฌธ๋“ค์ด ์‚ฌ์šฉ๋˜์—ˆ์„ ๋•Œ, ์ค‘๊ด„ํ˜ธ ๋ฐ–์˜ ๋ฒ”์œ„์—์„œ๋„ ๊ทธ ์•ˆ์˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ณ€์ˆ˜๋ช… ์ค‘๋ณต ํ—ˆ์šฉ : ๊ฐ™์€ ๋ณ€์ˆ˜๋ช…์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฒ”์œ„์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•จ.
  • var ํ‚ค์›Œ๋“œ์˜ ์ƒ๋žต : ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋–„, ๋ณดํ†ต int๋‚˜ char์™€ ๊ฐ™์€ ๋ณ€์ˆ˜ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” varํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋ฅผ ์ƒ๋žตํ•˜์—ฌ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š์Œ.
  • ๋ ‰์‹œ์ปฌ ํŠน์„ฑ

 

 

2. ์Šค์ฝ”ํ”„ ์ฒด์ธ

ํ•จ์ˆ˜๊ฐ€ ์ค‘์ฒฉํ•จ์ˆ˜์ผ ๋•Œ ์ƒ์œ„ํ•จ์ˆ˜์˜ ์œ ํšจ๋ฒ”์œ„๊นŒ์ง€ ํก์ˆ˜ํ•˜๋Š” ๊ฒƒ.

์ฆ‰, ํ•˜์œ„ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ฐธ์กฐํ•˜๋Š” ์ƒ์œ„ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ.

innerFunction ์‹คํ–‰๋ฌธ๋งฅ์˜ ์œ ํšจ๋ฒ”์œ„ ์ฒด์ธ ๋ฆฌ์ŠคํŠธ๋Š” 1๋ฒˆ์ง€์— ์ƒ์œ„ ํ•จ์ˆ˜์ธ outerFunction์˜ ๋ณ€์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

๋งŒ์•ฝ innerFunction๋‚ด๋ถ€์— ์ƒˆ๋กœ์šด ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฉด ๊ทธ ๋‚ด๋ถ€ํ•จ์ˆ˜์˜ ์œ ํšจ๋ฒ”์œ„ ์ฒด์ธ ๋ฆฌ์ŠคํŠธ์˜

1๋ฒˆ์ง€๋Š” outerFunction์˜ ๋ณ€์ˆ˜ ๊ฐ์ฒด๋ฅผ, 2๋ฒˆ์ง€๋Š” innerFunction์˜ ๋ณ€์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

 

 

3. ๋ณ€์ˆ˜ ์ˆจ๊ธฐ๊ธฐ

3-1) var์„ ์–ธ์„ ์ด์šฉ

function f1(a){    #์™ธ๋ถ€ ๋ธ”๋ก 
    function f2(a){   #๋‚ด๋ถ€ ๋ธ”๋ก 
        return a-1; 
    } 

    var b;   #b๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ˆจ๊น€. var์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์—ญ์œผ๋กœ ์„ ์–ธ๋จ. 
    b = a+f2(a); 
    console.log(b); 
} 

f1(2);  //3 

 

3-2)  ๊ฐ™์€ ์ด๋ฆ„์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•

{ 
    let x = 'blue'; 
    console.log(x);   //blue 
    { 
        let x = 'red';    #์™ธ๋ถ€ ๋ธ”๋ก์˜ x์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•จ. 
        console.log(x);   //red 
    } 
    console.log(x);   //blue 
} 

 

3-3) ๋ชจ๋“ˆ ํŒจํ„ด์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• : ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋งŒ์„ ์ œ๊ณต, ์ง์ ‘์ ์œผ๋กœ ๋ณ€์ˆ˜์—๋Š” ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•จ.

functio examModule() {   
    var something = "cool"; 
    var another = [1, 2, 3]; 
   
    function f2(a){   
        console.log(something);         
    } 

    function f2(a){   
        console.log(another);         
    } 

   return {   
        doSomething: doSomething, 
        doAnother: doAnother 
    }; 
}

 

 

4. ํด๋กœ์ € : ๊ฐ„๋‹จํžˆ ๋งํ•ด, ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ž‘์„ฑ๋œ ํ•จ์ˆ˜์ด๋‹ค. ๋‚ด๋ถ€ํ•จ์ˆ˜์—์„œ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜๋Š” ๋‹ซํžˆ์ง€ ๋ชปํ•˜๊ณ  ๋‚ด๋ถ€ํ•จ์ˆ˜์— ์˜ํ•ด์„œ ๋‹ซํžˆ๊ฒŒ ๋œ๋‹ค.

function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
#myFunc๋ณ€์ˆ˜์— displayName์„ ๋ฆฌํ„ดํ•จ
#์œ ํšจ๋ฒ”์œ„์˜ ์–ดํœ˜์  ํ™˜๊ฒฝ์„ ์œ ์ง€

myFunc();
#๋ฆฌํ„ด๋œ displayName ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰(name ๋ณ€์ˆ˜์— ์ ‘๊ทผ)

 

4-1) ํด๋กœ์ €์˜ ์žฅ์ 

  • ์Šค์ฝ”ํ”„ ์•ˆ์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ํ•ด๋‹น ์Šค์ฝ”ํ”„๋ฅผ ๋” ์˜ค๋ž˜ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
let f;
{
    let o = { note: 'Safe' }
    f = function() {
    	return o;
    }
}
let oRef = f();
oRef.note = "Not so safe after all!"

 

 

[์ฐธ๊ณ  ์‚ฌ์ดํŠธ] 

์Šค์ฝ”ํ”„ ์ฒด์ธ - http://www.nextree.co.kr/p7363/

ํด๋กœ์ € - https://medium.com/@khwsc1/%EB%B2%88%EC%97%AD-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%8A%A4%EC%BD%94%ED%94%84%EC%99%80-%ED%81%B4%EB%A1%9C%EC%A0%80-javascript-scope-and-closures-8d402c976d19