๐Ÿ’ป ๊ณต๋ถ€ ๊ธฐ๋ก/๐ŸŽž๏ธ JavaScript

JavaScript | ํด๋กœ์ € ํ•จ์ˆ˜

  • -

 

 

๐Ÿ“Œ ํด๋กœ์ € ํ•จ์ˆ˜

ํด๋กœ์ €๋Š” ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์–ดํœ˜์  ํ™˜๊ฒฝ์˜ ์กฐํ•ฉ์ด๋‹ค. ํด๋กœ์ €๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด JS๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€์ˆ˜์˜ ์œ ํšจ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•ด์•ผํ•œ๋‹ค.

 

๐Ÿ“Œ ์–ดํœ˜์  ๋ฒ”์œ„ ์ง€์ •(Lexical scoping)

function init() {
  var name = "Mozilla"; // name์€ init์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ง€์—ญ ๋ณ€์ˆ˜์ด๋‹ค.
  function displayName() { // displayName() ์€ ๋‚ด๋ถ€ ํ•จ์ˆ˜์ด๋ฉฐ, ํด๋กœ์ €๋‹ค.
    alert(name); // ๋ถ€๋ชจ ํ•จ์ˆ˜์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  }
  displayName();
}
init();

 

๐Ÿ“Œ let๊ณผ const๋ฅผ ์‚ฌ์šฉํ•œ ๋ฒ”์œ„ ์ง€์ •

if (Math.random() > 0.5) {
  var x = 1;
} else {
  var x = 2;
}
console.log(x);

 

๐Ÿ“Œ ํด๋กœ์ €(Closure)

์˜ˆ์ œ1

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

var myFunc = makeFunc();
//myFunc๋ณ€์ˆ˜์— displayName์„ ๋ฆฌํ„ดํ•จ
//์œ ํšจ๋ฒ”์œ„์˜ ์–ดํœ˜์  ํ™˜๊ฒฝ์„ ์œ ์ง€
myFunc();
//๋ฆฌํ„ด๋œ displayName ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰(name ๋ณ€์ˆ˜์— ์ ‘๊ทผ)

 

์˜ˆ์ œ2

function makeAdder(x) {
  var y = 1; // ๋ฐ˜์˜๋œ ์ƒํƒœ
  return function(z) {
    y = 100; // 1 > 100 ์œผ๋กœ ๋ณ€๊ฒฝ
    return x + y + z;
  };
}

var add5 = makeAdder(5); // x ์ธ์ž ๊ฐ’ 5 ์ •์˜
var add10 = makeAdder(10);
//ํด๋กœ์ €์— x์™€ y์˜ ํ™˜๊ฒฝ์ด ์ €์žฅ๋จ

// retern add5๋ณ€์ˆ˜์˜ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ •์˜๋กœ add5(z); z์˜ ์ธ์ž ๊ฐ’ 2 ์ •์˜ add5์˜ retern x+y+z; ์‹คํ–‰
// add5 ๋Š” ์ด๋ฏธ makeAdder ํ•จ์ˆ˜์˜ x๊ฐ’ 5๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ.
// add5(z) ์˜ z ์ธ์ž ๊ฐ’์— ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•˜์—ฌ y ๊ฐ’์˜ ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ๊ณผ z ์ธ์ž์˜ ๊ฐ’ ์ •์˜
// ์ตœ์ข…์  add5() ์˜ retern ์œผ๋กœ ์‹คํ–‰ ๊ณ„์‚ฐ.
console.log(add5(2));  // 107 (x:5 + y:100 + z:2)
console.log(add10(2)); // 112 (x:10 + y:100 + z:2)
// ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ ํด๋กœ์ €์— ์ €์žฅ๋œ x, y๊ฐ’์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ๊ณ„์‚ฐ

 

๐Ÿ“Œ ์‹ค์šฉ์ ์ธ ํด๋กœ์ €

ํด๋กœ์ €๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ(์–ดํœ˜์  ํ™˜๊ฒฝ)์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ด€์‹œ์ผœ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•˜๋‹ค. ์ด๊ฒƒ์€ ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ์™€(๊ทธ ๊ฐ์ฒด์˜ ์†์„ฑ) ํ•˜๋‚˜ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ๋ฉ”์†Œ๋“œ๋“ค์„ ์—ฐ๊ด€์‹œํ‚จ๋‹ค๋Š” ์ ์—์„œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋ถ„๋ช…ํžˆ ๊ฐ™์€ ๋งฅ๋ฝ์— ์žˆ๋‹ค.

 

์‹ค์šฉ ์˜ˆ์ œ (CSS)

body {
  font-family: Helvetica, Arial, sans-serif;
  font-size: 12px;
}

h1 {
  font-size: 1.5em;
}

h2 {
  font-size: 1.2em;
}
์šฐ๋ฆฌ์˜ ๋Œ€ํ™”์‹ ๊ธ€์ž ํฌ๊ธฐ ๋ฒ„ํŠผ๋“ค์€ body ์š”์†Œ์˜ font-size ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋Ÿฐ ์กฐ์ •์€ ์ƒ๋Œ€์  ๋‹จ์œ„๋“ค ๋•๋ถ„์— ํŽ˜์ด์ง€์˜ ๋‹ค๋ฅธ ์š”์†Œ์— ์˜ํ•ด ์„ ํƒ๋œ๋‹ค.

 

์‹ค์šฉ ์˜ˆ์ œ (JS)

function makeSizer(size) {
  return function() {
    document.body.style.fontSize = size + 'px';
  };
}

var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);
size2, size4, size6์€ body ์š”์†Œ์˜ ๊ธ€์ž ํฌ๊ธฐ๋ฅผ ๊ฐ๊ฐ 12, 14, 16 ํ”ฝ์…€๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด ํ•จ์ˆ˜๋“ค์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฒ„ํŠผ๋“ค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
<a href="#" id="size-12">12</a>
<a href="#" id="size-14">14</a>
<a href="#" id="size-16">16</a>

 

12, 14, 16 ๋ฒ„ํŠผ์œผ๋กœ ํฐํŠธ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ถœ์ฒ˜ | MDN JavaScript

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.