ȸ¿ø°¡ÀԡžÆÀ̵ð/ºñ¹øã±â
ȨÀ¸·Î


[¹ø¿ª] ÀÚ¹Ù½ºÅ©¸³Æ® ´Ù½Ã ¹è¿ì±â (A re - introduction to JavaScript)
9³â Àü
A re-introduction to JavaScript (JS Tutorial)

Introduction

¿Ö "´Ù½Ã-¹è¿ì±â" (re-introduction) ¶ó´Â Ç¥ÇöÀ» ½è´Â°¡? ¿Ö³ÄÇϸé JavaScript ´Â °¡Àå À߸ø ÀÌÇØÇÏ´Â °æ¿ì°¡ ¸¹Àº ¾ð¾î À̱⠶§¹®ÀÌ´Ù. Á¾Á¾ °ú¼ÒÆò°¡ ¹ÞÁö¸¸, ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ ´Ü¼øÇÔ µÚ¿¡´Â ¸Å¿ì °­·ÂÇÑ ±â´ÉÀÌ ¼û°ÜÁ® ÀÖ´Ù. 2005 ³âºÎÅÍ ¾ÆÁÖ °­·ÂÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ¾îÇø®ÄÉÀ̼ÇÀÌ µîÀåÇÏ¿´À¸¸ç, ÀÌ ¾îÇø®ÄÉÀ̼ǵéÀº, À¥ °³¹ßÀÚ°¡ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ±íÀÌ ÀÌÇØÇؾßÇÑ´Ù´Â °ÍÀ» º¸¿©ÁØ´Ù.

¾ð¾îÀÇ ¿ª»ç¸¦ ¸ÕÀú »ìÆ캸ÀÚ. ÀÚ¹Ù½ºÅ©¸³Æ®´Â 1995 ³â, Netscape ÀÇ °³¹ßÀÚ¿´´ø Brendan Eich °¡ ¸¸µé¾ú°í, 1996 ³â ÃÊ¿¡ Netscape 2 ¿Í ÇÔ²² Ãâ½ÃµÇ¾ú´Ù. ¿ø·¡´Â LiveScript ¶ó°í ºÎ¸£·Á°í ÇÏ¿´À¸³ª, Java ÀÇ Àα⿡ Æí½ÂÇÏ·Á´Â ¸¶ÄÉÆà Àü·«À¸·Î À̸§ÀÌ ¹Ù²î¿´´Ù - À̸§À¸·Î ÀÎÇÏ¿© »ç¶÷µéÀÌ Çò°¥·Á ÇÏÁö¸¸ ÀÚ¹Ù¿Í ÀÚ¹Ù½ºÅ©¸³Æ®´Â ´Ù¸¥ ¾ð¾îÀÌ°í °øÅëÁ¡ÀÌ º°·Î ¾ø´Ù.

¸¶ÀÌÅ©·Î¼ÒÇÁÆ®´Â ¸î°³¿ù ÈÄ IE 3 ¿¡ JScript ¶ó´Â ¾ð¾î¸¦ Ãâ½ÃÇÏ¿´´Ù. ³Ý½ºÄÉÀÌÇÁ´Â Ecma International À̶ó´Â À¯·´ Ç¥ÁØÈ­ ±â±¸¿¡ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ Á¦ÃâÇÏ¿´°í, ±× °á°ú°¡ 1997 ³âÀÇ ECMAScript Ç¥ÁØÀÌ´Ù. ÀÌ Ç¥ÁØÀº 1999 ³â ECMAScript edition 3 ·Î ´ë´ëÀûÀÎ °³ÆíÀÌ µÇ°í, ±× ÀÌÈÄ·Î Å« º¯ÇÔÀÌ ¾ø¾ú´Ù. 4 ¹ø° ¹öÀüÀº, ¾ð¾îÀÇ º¹À⼺¿¡ ´ëÇÑ Á¤Ä¡Àû °ßÇØ Â÷ÀÌ·Î, Æó±âµÇ¾ú´Ù. 5 ¹ø° ¹öÀüÀº, 4 ¹ø° ¹öÀüÀ» ±âÃÊ·Î 2009 ³â °Ü¿ï¿¡ ¹ßÇ¥µÇ¾ú´Ù.

ÀÌ·± ¾ÈÁ¤¼ºÀº (¿ªÁÖ: ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ¿À·¨µ¿¾È º¯ÇÏÁö ¾Ê¾Ò´Ù´Â °Í) °³¹ßÀÚ¿¡°Ô´Â ÁÁÀº ¼Ò½ÄÀÌ´Ù. ³ª´Â ÁÖ·Î ¹öÀü 3 ¿¡ ´ëÇØ ´Ù·ê °ÍÀÌ´Ù.

´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í´Â ´Ù¸£°Ô, ÀÚ¹Ù½ºÅ©¸³Æ®´Â ÀԷ°ú Ãâ·Â¿¡ ´ëÇÑ °³³äÀÌ ¾ø´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â host ȯ°æ¿¡¼­ ½ºÅ©¸³Æ® ¾ð¾î·Î »ç¿ëµÇ°Ô ¼³°èµÇ¾úÀ¸¸ç, ¿ÜºÎ ¼¼°è¿Í ¼ÒÅëÇÏ´Â °ÍÀº host ȯ°æÀÌ Ã¥ÀÓÁö°Ô µÈ´Ù. °¡Àå ÈçÇÏ°Ô »ç¿ëµÇ´Â host ȯ°æÀº ºê¶ó¿ìÀúÀÌ´Ù. ÇÏÁö¸¸ ÀÚ¹Ù½ºÅ©¸³Æ® ÀÎÅÍÇÁ¸®ÅÍ´Â Adobe Acrobat, Photoshop, Yahoo ÀÇ À§Á¬ ¿£Áø, ¶Ç´Â node.js °°Àº ¼­¹ö ȯ°æ¿¡¼­µµ ½ÇÇàµÉ ¼ö ÀÖ´Ù.

Overview

ÀÚ¹Ù½ºÅ©¸³Æ®´Â °´Ã¼ÁöÇâ ¾ð¾îÀÌ°í, dynamic ¾ð¾îÀÌ´Ù (¿ªÁÖ: dynamic À̶õ ´Ù¸¥ ¾ð¾î¿¡¼­ ÄÄÆÄÀϽÿ¡ ÇÒ ÀÏÀ», ½Ç½Ã°£¿¡ ÇÏ´Â °æ¿ì°¡ ¸¹Àº ¾ð¾î¶õ ¶æ). ÀÚ¹Ù½ºÅ©¸³Æ®¿¡´Â ŸÀÔÀÌ ÀÖ°í, operator (¿¬»êÀÚ), ÇÙ½É °´Ã¼µé°ú ÇÔ¼öµéÀÌ ÀÖ´Ù. ¹®¹ýÀº Java ¿Í C ¾ð¾î¸¦ Â÷¿ëÇÏ¿©, ÀÌ µÎ ¾ð¾îÀÇ ±¸Á¶Àû Ư¼ºÀ» ÀÚ¹Ù½ºÅ©¸³Æ®°¡ °¡Áö°í ÀÖ´Â °æ¿ìµµ ¸¹´Ù. °¡Àå Å« Â÷ÀÌÁ¡Àº, ÀÚ¹Ù½ºÅ©¸³Æ®¿¡´Â Ŭ·¡½º°¡ ¾ø´Ù´Â °ÍÀÌ´Ù; ´ë½Å¿¡ Ŭ·¡½º ±â´ÉÀº °´Ã¼ prototype ¿¡ ÀÇÇØ ±¸ÇöµÈ´Ù. ¶Ç ´Ù¸¥ Â÷ÀÌÁ¡Àº ÇÔ¼ö°¡ °´Ã¼¶ó´Â °ÍÀÌ´Ù; ½ÇÇàÄڵ带 °¡Áö°í ÀÖ´Â ÇÔ¼ö¸¦ ´Ù¸¥ °´Ã¼µéó·³ À̸® Àú¸® Àü´ÞÇÒ ¼ö ÀÖ´Ù.

¸ðµç ¾ð¾îµéÀÇ °¡Àå ±âº»ÀûÀÎ ±¸¼º¿ä¼Ò¶ó°í ÇÒ ¼ö ÀÖ´Â "ŸÀÔ" ºÎÅÍ ¸ÕÀú »ìÆ캸ÀÚ. ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Î±×·¥Àº °ªÀ» ´Ù·ç¸ç, ÀÌ °ªµéÀº ŸÀÔÀ» °¡Áø´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ Å¸ÀÔµéÀº ´ÙÀ½°ú °°´Ù:

... ¾Æ, ±×¸®°í Undefined ¿Í Null ÀÌ ÀÖ´Ù. Ưº°ÇÑ °´Ã¼ (object) ŸÀÔÀÎ Arrays µµ ÀÖ´Ù. Dates ¿Í Regular Expressions °´Ã¼ ŸÀÔµµ ÀÖ´Ù. ±×¸®°í Á¤È®È÷ ¸»ÇÏÀÚ¸é, ÇÔ¼öµµ Ưº°ÇÑ °´Ã¼ ŸÀÔÀÌ´Ù. µû¶ó¼­ ŸÀÔµéÀ» Á» ´õ ÀÚ¼¼È÷ ³ª¿­ÇÏ¸é ´ÙÀ½°ú °°´Ù:

  • Number
  • String
  • Boolean
  • Object
    • Function
    • Array
    • Date
    • RegExp
  • Null
  • Undefined

Error ŸÀÔµµ ÀÖ±ä ÇÏ´Ù. ÀÌ ¹®¼­¿¡¼­´Â ÆíÀÇ»ó, ù¹ø° ¸®½ºÆ®¸¦ ÀÌ¿ëÇÏ¿© ¼³¸íÇÏ°Ú´Ù.

Numbers

ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ ¼ýÀÚ´Â, Ç¥ÁØ ¹®¼­¿¡ µû¸£¸é "double-precision 64-bit format IEEE 754 values" ÀÌ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®¿¡´Â integer (Á¤¼ö) ¶ó´Â °ÍÀÌ ¾ø´Ù. µû¶ó¼­ »ê¼ú Ç¥ÇöÀ» ´Ù·ê ¶§, Á¶½ÉÇØ¾ß ÇÑ´Ù:

0.1 + 0.2 == 0.30000000000000004

ÇÏÁö¸¸ ½ÇÁ¦·Î´Â, ºê¶ó¿ìÀúµéÀº integer °ªÀ» 32-bit integer ·Î ó¸® ÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference">The Complete JavaScript Number Reference À» ÂüÁ¶Çϱ⠹ٶõ´Ù.

´õÇϱâ, »©±â, modulus µîµîÀÇ ¼öÄ¢ ¿¬»ê ÀÌ Á¦°øµÈ´Ù. Á»Àü¿¡ ¾ê±âÇÏ±æ ±î¸Ô¾ú´Âµ¥, Math ¶ó´Â ³»Àå °´Ã¼¸¦ ÀÌ¿ëÇÏ¿©, °í±Þ °è»êÀ» ÇÒ ¼ö°¡ ÀÖ´Ù:

Math.sin(3.5);
var d = Math.PI * r * r;

parseInt() ¸¦ ÀÌ¿ëÇÏ¿©, string À» integer ·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù. º¯È¯½Ã »ç¿ëÇÒ base ¸¦ µÎ¹ø° ÀÎÀÚ·Î ¹Þ´Â´Ù:

> parseInt("123", 10)
123
> parseInt("010", 10)
10

base ÀÎÀÚ¸¦ Àü´ÞÇÏÁö ¾ÊÀ¸¸é, ÀÌÀü ºê¶ó¿ìÀúµé (2013 ³â ÀÌÀüÀÇ) ¿¡¼­ ¿¹»óÄ¡ ¸øÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù:

> parseInt("010")
8

parseInt °¡ ù 0 À» º¸°í base ¸¦ 8 ·Î »ç¿ëÇ߱⠶§¹®ÀÌ´Ù.

2 Áø¼ö¸¦ 10 Áø¼ö·Î ¹Ù²Ù·Á¸é:

> parseInt("11", 2)
3

float ¼ýÀÚµµ parseFloat() ¸¦ ÀÌ¿ëÇÏ¿© º¯È¯ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â Ç×»ó base 10 À» »ç¿ëÇÑ´Ù.

+ ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÏ¿© °ªÀ» ¼ýÀÚ·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù:

> + "42"
42

string ÀÌ ¼ýÀÚ·Î º¯ÇüµÉ ¼ö ¾øÀ» ¶§¿¡´Â NaN (Not a Number) À̶ó´Â Ưº°ÇÑ °ªÀÌ ¸®ÅϵȴÙ.

> parseInt("hello", 10)
NaN

NaN Àº Àü¿°¼ºÀÌ °­ÇÏ´Ù: NaN À» ¾î¶² ¼ö½Ä¿¡ ÀÔ·ÂÇϸé, ¼ö½Ä¿¡ °ü°è¾øÀÌ °á°ú°ªÀÌ NaN ÀÌ µÈ´Ù:

> NaN + 5
NaN

isNaN() À» ÀÌ¿ëÇÏ¿© NaN ÀÎÁö È®ÀÎÇÒ ¼ö ÀÖ´Ù:

> isNaN(NaN)
true

Infinity ¿Í -Infinity ¶ó´Â °ªµéµµ ÀÖ´Ù:

> 1 / 0
Infinity
> -1 / 0
-Infinity

isFinite() À» ÀÌ¿ëÇÏ¿© Infinity, -Infinity NaN À» Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù:

> isFinite(1/0)
false
> isFinite(-Infinity)
false
> isFinite(NaN)
false

Note: parseInt() °ú parseFloat() ÇÔ¼ö´Â, ¹®ÀÚ¿­ÀÇ Ä³¸¯Å͸¦ Çϳª¾¿ Àдٰ¡ ÁöÁ¤ÇÑ ¼ýÀÚ ÇüÅ¿¡ ¸ÂÁö ¾Ê´Â ij¸¯Å͸¦ ¸¸³ª¸é, ÀÌÀü±îÁö ÀÐÀº ¼ýÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ¹Ý¸é¿¡ "+" ¿¬»êÀÚ´Â, ÇϳªÀÇ Ä³¸¯ÅÍ¶óµµ ÀÌ»óÀÌ ÀÖÀ¸¸é NaN À» ¸®ÅÏÇÑ´Ù. Äֿܼ¡¼­ "10.2abc" ¶ó´Â °ªÀ», °¢°¢ÀÇ ÇÔ¼öµé¿¡°Ô ³Ñ°Üº¸¸é, ¹«½¼ ¾ê±âÀÎÁö ½±°Ô ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù.

Strings

ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ string Àº ij¸¯ÅÍÀÇ ³ª¿­ÀÌ´Ù. Á»´õ Á¤È®È÷ ¸»Çϸé, °¢ ij¸¯ÅÍ°¡ 16-bit ¼ýÀڷΠǥÇöµÇ´Â Unicode characters ÀÇ ³ª¿­ÀÌ´Ù. ·ÎÄöóÀÌ¡À» °èȹÇÏ°í ÀÖ´Â »ç¶÷µé¿¡°Ô´Â Èñ¼Ò½ÄÀÌ´Ù.

ÇϳªÀÇ character ¸¦ Ç¥ÇöÇÏ·Á¸é, ±æÀÌ°¡ 1 ÀÎ string À» »ç¿ëÇÑ´Ù.

string ÀÇ ±æÀÌ´Â length ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© ¾ò´Â´Ù:

> "hello".length
5

string µµ °´Ã¼¶ó´Â ¾ê±â¸¦ ÇÑÀûÀÌ Àִ°¡? string Àº methods µµ °¡Áö°í ÀÖ´Ù:

> "hello".charAt(0)
h
> "hello, world".replace("hello", "goodbye")
goodbye, world
> "hello".toUpperCase()
HELLO

Other types

ÀÚ¹Ù½ºÅ©¸³Æ®´Â 'object' ŸÀÔÀÇ °´Ã¼À̸鼭, ÀǵµÀûÀ¸·Î "¾ø´Â °ª" (non-value) À» ³ªÅ¸³»´Â null °ú, 'undefined' ŸÀÔÀÇ °´Ã¼À̸鼭, ÃʱâÈ­ ÇÏÁö ¾ÊÀº °ªÀ» ³ªÅ¸³»´Â undefined ¸¦ ±¸º°ÇÑ´Ù. º¯¼ö¿¡ ´ëÇØ °ð ´Ù·êÅ×Áö¸¸, ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â °ªÀ» ÇÒ´çÇÏÁö ¾Ê°í º¯¼ö¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. ÀÌ ¶§ÀÇ º¯¼öÀÇ Å¸ÀÔÀº undefined °¡ µÈ´Ù.

true ¿Í false °ªÀ» °¡Áú ¼ö ÀÖ´Â, boolean ŸÀÔµµ Á¦°øÇÑ´Ù. ´ÙÀ½ ¹ýÄ¢¿¡ µû¶ó¼­, ¾î¶² °ªÀ̵çÁö boolean °ªÀ¸·Î º¯ÇüµÉ ¼ö ÀÖ´Ù.

  1. false, 0, ºó ¹®ÀÚ¿­ (""), NaN, null, undefined ´Â ¸ðµÎ false ·Î º¯ÇüµÈ´Ù.
  2. ´Ù¸¥ ¸ðµç °ªÀº true ·Î º¯ÇüµÈ´Ù.

Boolean() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î º¯È¯ÇÒ ¼öµµ ÀÖ´Ù:

> Boolean("")
false
> Boolean(234)
true

ÇÏÁö¸¸, ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ÀÚµ¿À¸·Î º¯È¯À» ÇÏ¿©Áֱ⠶§¹®¿¡, ÀÌ·¸°Ô ÇÏ´Â °æ¿ì´Â µå¹°´Ù.

&& (³í¸®Àû and), || (³í¸®Àû or), ! (³í¸®Àû not) µîÀÇ boolean ¿¬»êÀÚ°¡ Á¦°øµÈ´Ù.

Variables

»õ·Î¿î º¯¼ö´Â var Å°¿öµå¸¦ ÀÌ¿ëÇÏ¿© ¼±¾ðÇÑ´Ù:

var a;
var name = "simon";

¼±¾ð½Ã¿¡ °ªÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, º¯¼öÀÇ Å¸ÀÔÀº undefined °¡ µÈ´Ù.

Java µîÀÇ ´Ù¸¥ ¾ð¾î¿Í ´Ù¸¥ Á¡Àº, block (¿ªÁÖ: { ... }) ÀÌ scope À» ¸¸µéÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; ÇÔ¼ö¸¸ÀÌ scope À» ¸¸µç´Ù. if ¹® ¾È¿¡, var ¸¦ ÀÌ¿ëÇÏ¿© º¯¼ö¸¦ ¼±¾ðÇϸé, ÀÌ º¯¼ö´Â ¼ÓÇØÀÖ´Â ÇÔ¼ö Àüü¿¡¼­ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù.

Operators

¼ýÀÚ °ü·Ã ¿¬»êÀÚµéÀº +, -, *, /, % (³ª¸ÓÁö ¿¬»êÀÚ) µîÀÌ ÀÖ´Ù. °ªÀº = ·Î ÇÒ´çÇÏ°í, += ¿Í -= µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

x += 5
x = x + 5

++ ¿Í -- À» ÀÌ¿ëÇÏ¿© °ªÀ» Áõ°¡/°¨¼Ò ½Ãų ¼ö ÀÖ´Ù. ¾Õ¿¡ ºÙÀÏ ¼öµµ µÚ¿¡ ºÙÀÏ ¼öµµ ÀÖ´Ù.

+ operator ´Â string À» ÇÕÄ¥ ¶§µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

> "hello" + " world"
hello world

string À» ¼ýÀÚ (¶Ç´Â ´Ù¸¥ °ª) ¿¡ ´õÇϸé, ¸ðµç °ÍÀÌ string À¸·Î ¸ÕÀú º¯È¯µÈ´Ù:

> "3" + 4 + 5
345
> 3 + 4 + "5"
75

ÀÌ ±â´ÉÀ» È°¿ëÇϸé, ºó string À» ´õÇÏ¿©, string À¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù.

<,>,<=,>= µîÀ¸·Î Comparisons (ºñ±³) ÇÒ ¼ö ÀÖ´Ù. ½ºÆ®¸µ°ú ¼ýÀÚ ¸ðµÎ °¡´ÉÇÏ´Ù. °ªÀÌ °°Àº °ÍÀ» È®ÀÎÇÏ´Â °ÍÀº ¾à°£ ¼³¸íÀÌ ÇÊ¿äÇÏ´Ù. == À» »ç¿ëÇÒ ¶§, ´Ù¸¥ ŸÀÔÀÇ °ª µÎ°³¸¦ ÁÖ¸é, ŸÀÔÀ» º¯È¯ÇÑ´Ù:

> "dog" == "dog"
true
> 1 == true
true

ŸÀÔ º¯È¯¾øÀÌ, °ªÀÌ °°ÀºÁö¸¦ È®ÀÎÇÏ·Á¸é === À» »ç¿ëÇÑ´Ù:

> 1 === true
false
> true === true
true

!= ¿Í !== µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÚ¹Ù½ºÅ©¸³Æ®´Â bitwise operations µµ Á¦°øÇÑ´Ù.

Control structures

ÀÚ¹Ù½ºÅ©¸³Æ®´Â C ¾ð¾î·ùÀÇ ¾ð¾îµé°ú À¯»çÇÑ Á¦¾î¹®µéÀ» Á¦°øÇÑ´Ù. Á¶°Ç¹®Àº if ¿Í else ¸¦ »ç¿ëÇÑ´Ù:

var name = "kittens";
if (name == "puppies") {
  name += "!";
} else if (name == "kittens") {
  name += "!!";
} else {
  name = "!" + name;
}
name == "kittens!!"

while °ú do-while ¹®µµ Á¦°øÇÑ´Ù. do-while Àº loop ÀÌ ÃÖ¼ÒÇÑ Çѹø ½ÇÇàµÇ±â¸¦ ¿øÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù:

while (true) {
  // ¹«ÇÑ ·ì!!
}

var input;
do {
  input = get_input();
} while (inputIsNotValid(input))

ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ for ¹®Àº C ³ª Java ÀÇ for ¹®°ú µ¿ÀÏÇÏ´Ù:

for (var i = 0; i < 5; i++) {
  // Will execute 5 times
}

&& ¿Í || ¿¬»êÀÚ´Â short-circuit ·ÎÁ÷À» »ç¿ëÇÑ´Ù. Áï, ù¹ø° ¿¬»êÀÚ¿¡ µû¶ó, µÎ¹ø° ÇÇ¿¬»êÀÚ¸¦ ½ÇÇàÇÒ ¼öµµ ÀÖ°í, ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ´Ù. °´Ã¼ÀÇ ¼Ó¼ºÀ» Á¢±ÙÇϱâ Àü¿¡ null °´Ã¼ÀÎÁö È®ÀÎÇÒ ¶§ À¯¿ëÇÏ°Ô ¾µ ¼ö ÀÖ´Ù:

var name = o && o.getName();

¶Ç´Â ±âº» °ªÀ» ¼³Á¤ÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Ù:

var name = otherName || "default";

´ÙÀ½°ú °°Àº Á¶°Ç¹®µµ °¡´ÉÇÏ´Ù:

var allowed = (age > 18) ? "yes" : "no";

switch ¹®À» ÀÌ¿ëÇÏ¿© ¼ýÀÚ³ª ¹®ÀÚ¿­¿¡ µû¶ó ´Ù¸¥ Äڵ带 ½ÇÇàÇÒ ¼ö ÀÖ´Ù:

switch(action) {
    case 'draw':
        drawit();
        break;
    case 'eat':
        eatit();
        break;
    default:
        donothing();
}

break ¸¦ Ãß°¡ÇÏÁö ¾ÊÀ¸¸é, ´ÙÀ½ case ¹®ÀÌ ½ÇÇàµÈ´Ù. º¸ÅëÀº break ¸¦ Ãß°¡ÇÏÁö¸¸, Á¤¸» ´ÙÀ½ case ¹®À» ½ÇÇàÇϱ⸦ ÀǵµÇÑ °ÍÀ̶ó¸é, ÁÖ¼®À¸·Î ¸í½ÃÇÏ´Â °ÍÀÌ ¾Ë¾Æº¸±â¿¡ ÁÁ´Ù:

switch(a) {
    case 1: // ´ÙÀ½ case ·Î ³Ñ¾î°£´Ù
    case 2:
        eatit();
        break;
    default:
        donothing();
}

default ¹®Àº ¼±ÅûçÇ×ÀÌ´Ù. switch ¿Í case ºÎºÐ¿¡ Ç¥Çö½ÄÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù; µÎ °ªÀº === À» ÀÌ¿ëÇÏ¿© ºñ±³µÈ´Ù.

switch(1 + 3) {
    case 2 + 2:
        yay();
        break;
    default:
        neverhappens();
}

Objects

ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ °´Ã¼´Â ´Ü¼øÈ÷ name-value Æä¾îµéÀÇ ¹­À½ÀÌ´Ù. ´ÙÀ½ °Íµé°ú ºñ½ÁÇÏ´Ù:

  • Dictionaries in Python
  • Hashes in Perl and Ruby
  • Hash tables in C and C++
  • HashMaps in Java
  • Associative arrays in PHP

ÀÌ µ¥ÀÌÅÍ ±¸Á¶°¡ ÀÌ·¸°Ô ¸¹ÀÌ »ç¿ëµÈ´Ù´Â °ÍÀº, ÀÌ µ¥ÀÌÅÍ ±¸Á¶·Î ÇÒ ¼ö ÀÖ´Â ÀÏÀÌ ¸¹´Ù´Â ¹ÝÁõÀÌ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ ¸ðµç °ÍÀÌ °´Ã¼À̱⠶§¹®¿¡, ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Î±×·¥Àº hash table À» ¸¹ÀÌ µÚÁ® º¸°Ô µÈ´Ù. Çؽ¬ Å×À̺íÀÌ ºü¸£´Ï ´ÙÇàÀÌ´Ù!

"name" ºÎºÐÀº ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ string ÀÌ°í, value ºÎºÐÀº ¾Æ¹« ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ °ªÀÌ µÉ ¼ö ÀÖ´Ù - ´Ù¸¥ °´Ã¼°¡ µÉ ¼öµµ ÀÖ´Ù. µû¶ó¼­ º¹ÀâÇÑ ÀڷᱸÁ¶¸¦ ¸¸µé ¼ö ÀÖ´Ù.

ºó °´Ã¼¸¦ ¸¸µå´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù:

var obj = new Object();

±×¸®°í ´ÙÀ½ ó·³µµ ÇÒ ¼ö ÀÖ´Ù:

var obj = {};

µÎ°³ÀÇ ±â´ÉÀº °°´Ù; µÎ¹ø° °ÍÀº object literal ¹®¹ýÀ̶ó°í ÇÏ°í, Á» ´õ Æí¸®ÇÏ´Ù. JSON µµ ÀÌ ¹®¹ýÀ» »ç¿ëÇÑ´Ù. °¡´ÉÇϸé ÀÌ ¹®¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.

»ý¼º ÈÄ¿¡´Â, °´Ã¼ÀÇ ¼Ó¼ºÀ» ´ÙÀ½°ú °°Àº µÎ°¡Áö ¹æ¹ýÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù:

obj.name = "Simon";
var name = obj.name;

±×¸®°í ´ÙÀ½Ã³·³...

obj["name"] = "Simon";
var name = obj["name"];

¿ª½Ã³ª °°Àº ¶æÀÌ´Ù. µÎ¹ø° ¹æ¹ýÀº ¼Ó¼ºÀÇ À̸§À» string À¸·Î Áشٴ ÀåÁ¡ÀÌ ÀÖ´Ù. Áï ½Ç½Ã°£À¸·Î string ÀÇ °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀ» ¾²¸é ÀÚ¹Ù½ºÅ©¸³Æ® ¿£Áø°ú, minfier ÀÇ ÃÖÀûÈ­°¡ Á¶±Ý ´ú µÇ´Â ´ÜÁ¡µµ ÀÖ´Ù. string ¹æ¹ýÀ» »ç¿ëÇϸé, ¿¹¾à¾î ¸¦ ¼Ó¼ºÀ̸§À¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù:

obj.for = "Simon"; // Syntax error, because 'for' is a reserved word
obj["for"] = "Simon"; // works fine

Object literal ¹®¹ýÀº object Àüü¸¦ ÃʱâÈ­ÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Ù:

var obj = {
    name: "Carrot",
    "for": "Max",
    details: {
        color: "orange",
        size: 12
    }
}

¼Ó¼º°ªÀº chain (¿¬°á) ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù:

> obj.details.color
orange
> obj["details"]["size"]
12

Arrays

ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­ array ´Â »ç½Ç Ưº°ÇÑ Å¸ÀÔÀÇ object ÀÌ´Ù. ÀÏ¹Ý object ó·³ µ¿ÀÛÇÏÁö¸¸ (¼ýÀÚ ¼Ó¼ºÀº [] ¹®¹ýÀ¸·Î¸¸ Á¢±ÙÇÒ ¼ö ÀÖ´Ù), length ¶ó´Â Ưº°ÇÑ ¼Ó¼ºÀÌ ÀÖ´Ù. ÀÌ °ªÀº Ç×»ó array ÀÇ °¡Àå Å« index + 1 ÀÌ´Ù.

¿¹Àü¿¡´Â array ¸¦ ´ÙÀ½Ã³·³ ¸¸µé¾ú´Ù:

> var a = new Array();
> a[0] = "dog";
> a[1] = "cat";
> a[2] = "hen";
> a.length
3

´ÙÀ½Ã³·³ array literal À» ÀÌ¿ëÇϸé Æí¸®ÇÏ´Ù:

> var a = ["dog", "cat", "hen"];
> a.length
3

array literal ¸¶Áö¸·¿¡ , À» Ãß°¡ÇÏ¸é ¾î¶² ºê¶ó¿ìÀú¿¡¼­´Â µ¿ÀÛÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. , À» ³¡¿¡ Ãß°¡ÇÏÁö ¸»¾Æ¶ó.

array.length ´Â ¹è¿­¾ÈÀÇ ¾ÆÀÌÅÛÀÇ °¹¼ö°¡ ¾Æ´Ò ¼öµµ ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸¶ó:

> var a = ["dog", "cat", "hen"];
> a[100] = "fox";
> a.length
101

array ÀÇ length ´Â °¡Àå Å« index + 1 ÀÌ´Ù.

Á¸ÀçÇÏÁö ¾Ê´Â index ¸¦ Á¢±ÙÇϸé, undefined ¸¦ ¾ò´Â´Ù:

> typeof a[90]
undefined

´ÙÀ½Ã³·³ array ¸¦ iterate (Çϳª¾¿ ¹æ¹®) ÇÒ ¼ö ÀÖ´Ù:

for (var i = 0; i < a.length; i++) {
    // Do something with a[i]
}

length ¼Ó¼ºÀ» ¸Å¹ø ãÁö ¾Ê°í, ´ÙÀ½Ã³·³ Çϸé Á¶±Ý ´õ È¿À²ÀûÀÌ´Ù:

for (var i = 0, len = a.length; i < len; i++) {
    // Do something with a[i]
}

´ÙÀ½ ó·³ ÇÒ ¼öµµ ÀÖ´Ù: (¿ªÁÖ: ÀбⰡ ¾î·Á¿ö¼­, ±×¸® ÁÁ¾Æº¸ÀÌÁø ¾Ê´Â´Ù)

for (var i = 0, item; item = a[i++];) {
    // Do something with item
}

µÎ°³ÀÇ º¯¼ö¸¦ ¼±¾ðÇÏ°í, for ÀÇ °¡¿îµ¥ ºÎºÐ¿¡¼­ °ªÀ» ÇÒ´çÇÏ°í, true ÀÎÁö È®ÀÎÇÑ´Ù - true ÀÌ¸é ·ìÀ» ½ÇÇàÇÑ´Ù. i °¡ ¸Å¹ø Áõ°¡µÇ±â ¶§¹®¿¡, array ÀÇ item À» Â÷·Ê·Î ¾ò¾î¿Â´Ù. (undefined) °°Àº "falsy" (¿ªÁÖ: false ·Î º¯ÇüµÇ´Â) item À» ¸¸³ª¸é loop À» ¸ØÃá´Ù.

ÀÌ ¹æ¹ýÀº array °¡ "falsy" °ªÀ» °¡ÁöÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ»¶§¿¡¸¸ »ç¿ëÇ϶ó. ¼ýÀÚ µ¥ÀÌÅ͵éÀ̶ó¸é 0 À» °¡Áú ¼ö ÀÖ°í, string µ¥ÀÌÅ͵éÀ̶ó¸é "" À» °¡Áú ¼ö ÀÖÀ¸´Ï, ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ÀÌ ¶§¿¡´Â i, len ¹æ¹ýÀ» »ç¿ëÇ϶ó.

for...in À» »ç¿ëÇÏ¿© ¹Ýº¹¹®À» ¸¸µé ¼öµµ ÀÖ´Ù. Array.prototype ¿¡ »õ·Î¿î ¼Ó¼ºÀ» Ãß°¡Çϸé, ÀÌ ¹Ýº¹¹®¿¡¼­ ÀÌ ¼Ó¼ºµéµµ iterate ÇÏ°Ô µÉ °ÍÀÌ´Ù:

for (var i in a) {
  // Do something with a[i]
}

¾ÆÀÌÅÛÀ» array ¿¡ Ãß°¡ÇÏ·Á¸é, ´ÙÀ½°ú °°ÀÌ ÇÏ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù:

a[a.length] = item;                 //  a.push(item); ¿Í °°´Ù

a.length °¡ °¡Àå Å« index + 1 À̱⠶§¹®¿¡, array ÀÇ ³¡¿¡ »õ °ø°£¿¡ °ªÀ» ÇÒ´çÇÏ´Â °ÍÀÌ µÈ´Ù.

Array ¿¡´Â ´ÙÀ½°ú °°Àº method µéÀÌ ÀÖ´Ù:

Method name Description
a.toString() ¡¡
a.toLocaleString() ¡¡
a.concat(item[, itemN]) Returns a new array with the items added on to it.
a.join(sep) ¡¡
a.pop() Removes and returns the last item.
a.push(item[, itemN]) Push adds one or more items to the end.
a.reverse() ¡¡
a.shift() ¡¡
a.slice(start, end) Returns a sub-array.
a.sort([cmpfn]) Takes an optional comparison function.
a.splice(start, delcount[, itemN]) Lets you modify an array by deleting a section and replacing it with more items.
a.unshift([item]) Prepends items to the start of the array.

Functions

ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ÀÌÇØÇÏ·Á¸é, ÇÔ¼ö¸¦ ÀÌÇØÇØ¾ß ÇÑ´Ù. °£´ÜÇÑ ÇÔ¼ö´Â ´ÙÀ½Ã³·³ »ý°å´Ù:

function add(x, y) {
    var total = x + y;
    return total;
}

ÀÚ¹Ù½ºÅ©¸³Æ® ÇÔ¼ö´Â 0 °³ ÀÌ»óÀÇ À̸§ÀÖ´Â ÀÎÀÚ¸¦ °®´Â´Ù. ÇÔ¼ö´Â ÀÚ½ÅÀÇ º¯¼ö¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. return À» ÀÌ¿ëÇÏ¿© ¾î´À ¶§³ª ÇÔ¼ö¸¦ Á¾·áÇÏ°í, °ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. return ¹®À» »ç¿ëÇÏÁö ¾ÊÀ¸¸é (¶Ç´Â return À» °ª ¾øÀÌ »ç¿ëÇϸé), ÀÚ¹Ù½ºÅ©¸³Æ®´Â undefined ¸¦ ¸®ÅÏÇÑ´Ù.

ÀÎÀÚ´Â »ý·«ÀÌ °¡´ÉÇÏ´Ù. »ý·«ÇÑ °æ¿ì ÀÎÀÚ´Â undefined °ªÀ» °®´Â´Ù.

> add()
NaN // undefined ¸¦ + ÇÏ¿´´Ù.

ÇÔ¼ö°¡ ¿¹»óÇÏ´Â °Íº¸´Ù ´õ ¸¹Àº ÀÎÀÚ¸¦ Àü´ÞÇÒ ¼öµµ ÀÖ´Ù:

> add(2, 3, 4)
5 // óÀ½ µÎ°³¸¦ ÇÕÇÑ´Ù. 4 ´Â ¹«½ÃµÈ´Ù.

arguments ¶ó´Â º¯¼ö´Â, ÇÔ¼ö¿¡ Àü´ÞµÈ ¸ðµç ÀÎÀÚµéÀ» array ÇüÅ·Π°¡Áö°í ÀÖ´Ù. add ÇÔ¼ö°¡ ÀÓÀÇÀÇ ÀÎÀÚ °¹¼ö¸¦ ¹Þµµ·Ï º¯°æÇÏ¿© º¸ÀÚ:

function add() {
    var sum = 0;
    for (var i = 0, j = arguments.length; i < j; i++) {
        sum += arguments[i];
    }
    return sum;
}

> add(2, 3, 4, 5)
14

Æò±ÕÀ» ±¸ÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ¿© º¸ÀÚ:

function avg() {
    var sum = 0;
    for (var i = 0, j = arguments.length; i < j; i++) {
        sum += arguments[i];
    }
    return sum / arguments.length;
}
> avg(2, 3, 4, 5)
3.5

À§ avg() ÇÔ¼ö´Â , ·Î ±¸ºÐµÈ ÀÎÀÚµéÀ» ¹Þ´Â´Ù - array ÀÇ Æò±Õ°ªÀ» ±¸ÇÏ·Á¸é ¾î¶»°Ô ÇÒ±î? ´ÙÀ½Ã³·³ ÇÔ¼ö¸¦ ¸¸µé ¼ö ÀÖ´Ù:

function avgArray(arr) {
    var sum = 0;
    for (var i = 0, j = arr.length; i < j; i++) {
        sum += arr[i];
    }
    return sum / arr.length;
}
> avgArray([2, 3, 4, 5])
3.5

ÇÏÁö¸¸, ¿ì¸®°¡ ÀÌ¹Ì ¸¸µé¾î ³õÀº ÇÔ¼ö¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖÀ¸¸é ´õ ÁÁÀ» °ÍÀÌ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â, apply() ¶ó´Â ÇÔ¼ö °´Ã¼ÀÇ method ¸¦ ÀÌ¿ëÇÏ¿©, array ¸¦ ÀÎÀÚ·Î ÇÏ¿©, ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù:

> avg.apply(null, [2, 3, 4, 5])
3.5

apply() ÀÇ µÎ¹ø° ÀÎÀÚ°¡, ÇÔ¼ö¿¡°Ô Àü´ÞÇÒ ÀÎÀÚµéÀÇ ¹è¿­ÀÌ´Ù. ù¹ø° ÀÎÀÚ´Â Á¶±Ý ÀÖ´Ù ¼³¸íÇÒ °ÍÀÌ´Ù. À§ ¹®Àå¿¡¼­, ÇÔ¼ö°¡ °´Ã¼¶ó´Â °ÍÀ» ´Ù½Ã Çѹø º¼ ¼ö ÀÖ´Ù.

ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â À̸§ ¾ø´Â ÇÔ¼ö¸¦ ¸¸µé ¼ö ÀÖ´Ù.

var avg = function() {
    var sum = 0;
    for (var i = 0, j = arguments.length; i < j; i++) {
        sum += arguments[i];
    }
    return sum / arguments.length;
}

function avg() ÇüÅÂ¿Í ¶æÀº °°´Ù. Ç¥Çö½ÄÀ» »ç¿ëÇÒ ÀÚ¸®¿¡ ÇÔ¼öÀÇ Á¤ÀǸ¦ ÀûÀ» ¼ö ÀÖ´Ù. À̸¦ ÀÌ¿ëÇÑ À¯¿ëÇÑ ±â¼úµéÀÌ ¸¹ÀÌ ÀÖ´Ù. ´ÙÀ½Àº local º¯¼ö¸¦ "¼û±â´Â" ¹æ¹ýÀ» º¸¿©ÁØ´Ù - ¸¶Ä¡ C ÀÇ block scope °°ÀÌ ¸»ÀÌ´Ù:

> var a = 1;
> var b = 2;
> (function() {
    var b = 3;
    a += b;
})();
> a
4
> b
2

ÇÔ¼ö¸¦ Àç±ÍÈ£ÃâÇÒ ¼ö ÀÖ´Ù. ºê¶ó¿ìÀúÀÇ DOM °°Àº tree ±¸Á¶¸¦ ´Ù·ê ¶§ À¯¿ëÇÏ´Ù.

function countChars(elm) {
    if (elm.nodeType == 3) { // TEXT_NODE
        return elm.nodeValue.length;
    }
    var count = 0;
    for (var i = 0, child; child = elm.childNodes[i]; i++) {
        count += countChars(child);
    }
    return count;
}

À̸§ ¾ø´Â ÇÔ¼ö¸¦ Àç±ÍÀûÀ¸·Î È£ÃâÇÒ ¼ö ÀÖÀ»±î? À̸§ÀÌ ¾ø´Âµ¥ ¸»ÀÌ´Ù. "À̸§ ÀÖ´Â, À̸§¾ø´Â ÇÔ¼ö" (named anonymous function) À» ¾²¸é µÈ´Ù.

var charsInBody = (function counter(elm) {
    if (elm.nodeType == 3) { // TEXT_NODE
        return elm.nodeValue.length;
    }
    var count = 0;
    for (var i = 0, child; child = elm.childNodes[i]; i++) {
        count += counter(child);
    }
    return count;
})(document.body);

À̸§ ¾ø´Â ÇÔ¼ö¿¡ ÁÖ¾îÁø À̸§Àº ÀÌ ÇÔ¼öÀÇ scope ¾È¿¡¼­¸¸ Á¢±Ù °¡´ÉÇÏ´Ù.

Custom objects

ÀüÅëÀûÀÎ °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö¿¡¼­´Â, °´Ã¼´Â, µ¥ÀÌÅÍ¿Í ÀÌ µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â ÇÔ¼öÀÇ ¹­À½ÀÌ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â prototype ±â¹ÝÀÇ ¾ð¾î·Î, C++ À̳ª Java ¿¡ Àִ Ŭ·¡½º ¹®ÀåÀÌ ¾ø´Ù. ´ë½Å¿¡, ÀÚ¹Ù½ºÅ©¸³Æ®´Â ÇÔ¼ö¸¦ Ŭ·¡½º·Î »ç¿ëÇÑ´Ù. first name °ú last name À» °¡Áö´Â person °´Ã¼°¡ ÀÖ´Ù°í ÇÏÀÚ. "first last" ¶Ç´Â "last, first" ÀÇ ÇüÅ·ΠÀ̸§À» º¸¿©ÁÖ´Â ¹æ¹ýÀÌ ÀÖ´Ù°í ÇÏÀÚ. ÇÔ¼ö¿Í °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© ´ÙÀ½Ã³·³ ÇÒ ¼ö ÀÖ´Ù:

function makePerson(first, last) {
    return {
        first: first,
        last: last
    }
}
function personFullName(person) {
    return person.first + ' ' + person.last;
}
function personFullNameReversed(person) {
    return person.last + ', ' + person.first;
}
> s = makePerson("Simon", "Willison");
> personFullName(s)
Simon Willison
> personFullNameReversed(s)
Willison, Simon

µ¿ÀÛÀº ÇÑ´Ù, ÇÏÁö¸¸ ÁöÀúºÐÇÏ´Ù. ÀÌ ¹æ¹ýÀ» »ç¿ëÇϸé, global namespace ¿¡ ¾öû³ª°Ô ¸¹Àº ÇÔ¼öµéÀ» °®°Ô µÉ °ÍÀÌ´Ù. ¿ì¸®´Â ÇÔ¼ö¸¦ °´Ã¼¿¡ ºÙÀÏ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÇÊ¿äÇÏ´Ù. ÇÔ¼öµµ °´Ã¼¶ó´Â »ç½ÇÀ» ÀÌ¿ëÇÏ¿© ´ÙÀ½Ã³·³ ÇÒ ¼ö ÀÖ´Ù:

function makePerson(first, last) {
    return {
        first: first,
        last: last,
        fullName: function() {
            return this.first + ' ' + this.last;
        },
        fullNameReversed: function() {
            return this.last + ', ' + this.first;
        }
    }
}
> s = makePerson("Simon", "Willison")
> s.fullName()
Simon Willison
> s.fullNameReversed()
Willison, Simon

this[33] ¶ó´Â »õ·Î¿î keyword °¡ µîÀåÇÏ¿´´Ù. ÇÔ¼ö¾È¿¡¼­ this ´Â ÇöÀç °´Ã¼¸¦ ³ªÅ¸³½´Ù. ÇÔ¼ö¸¦ ¾î¶»°Ô È£ÃâÇÏ¿´´ÂÁö¿¡ µû¶ó this ÀÇ Àǹ̰¡ ´Þ¶óÁö°Ô µÈ´Ù. °´Ã¼¿¡ dot notation or bracket notation (anObject.foo, anObject["foo"]) À» ÀÌ¿ëÇÏ¿© ÇÔ¼ö¸¦ È£ÃâÇÏ¿´´Ù¸é, ÀÌ °´Ã¼°¡ this °¡ µÈ´Ù. ±×·¸Áö ¾Ê´Ù¸é this ´Â global °´Ã¼¸¦ °¡¸®Å°°Ô µÈ´Ù. ÀÚÁÖ ¹üÇÏ´Â ½Ç¼öÁßÀÇ ÇϳªÀÌ´Ù:

> s = makePerson("Simon", "Willison")
> var fullName = s.fullName;
> fullName()
undefined undefined

fullName() À» È£ÃâÇÒ ¶§, this ´Â global °´Ã¼°¡ µÈ´Ù. ÇÏÁö¸¸ ÀÌ global °´Ã¼¿¡ first ³ª last º¯¼ö°¡ ¾ø±â ¶§¹®¿¡, undefined ¸¦ ¾ò°Ô µÈ´Ù.

this ¸¦ ÀÌ¿ëÇÏ¿© makePerson ÇÔ¼ö¸¦ °³¼±ÇÒ ¼ö ÀÖ´Ù:

function Person(first, last) {
    this.first = first;
    this.last = last;
    this.fullName = function() {
        return this.first + ' ' + this.last;
    }
    this.fullNameReversed = function() {
        return this.last + ', ' + this.first;
    }
}
var s = new Person("Simon", "Willison");

new ¶ó´Â »õ·Î¿î keyword ¸¦ »ç¿ëÇÏ¿´´Ù. new ´Â this ¿Í ±íÀº ¿¬°üÀÌ ÀÖ´Ù. new ´Â »õ·Î¿î ºó °´Ã¼¸¦ ¸¸µé°í, ÇÔ¼ö¸¦ È£ÃâÇϸç, ÀÌ ÇÔ¼ö¿¡¼­ this ´Â »ý¼ºµÈ °´Ã¼°¡ µÈ´Ù. new ¸¦ ÀÌ¿ëÇÏ¿© È£ÃâÇÒ ÇÔ¼öµéÀ» constructor ÇÔ¼ö¶ó°í ºÎ¸¥´Ù. °ü·ÊÀûÀ¸·Î ÀÌ ÇÔ¼öµéÀÇ À̸§Àº ´ë¹®ÀÚ·Î ½ÃÀÛÇÏ°Ô ÇÑ´Ù.

Person °´Ã¼´Â ¸¹ÀÌ °³¼±µÇ¾úÁö¸¸, ¿©ÀüÈ÷ ÁöÀúºÐÇÑ ±¸¼®ÀÌ ÀÖ´Ù. person °´Ã¼¸¦ ¸¸µé¶§¸¶´Ù ÇÔ¼ö °´Ã¼µéÀ» »õ·Î ¸¸µé°í ÀÖ´Â °ÍÀÌ´Ù - ÀÌ ÄÚµåµéÀ» °øÀ¯ÇÏ´Â °ÍÀÌ ´õ ÁÁÁö ¾Ê°Ú´Â°¡?

function personFullName() {
    return this.first + ' ' + this.last;
}
function personFullNameReversed() {
    return this.last + ', ' + this.first;
}
function Person(first, last) {
    this.first = first;
    this.last = last;
    this.fullName = personFullName;
    this.fullNameReversed = personFullNameReversed;
}

ÇÔ¼ö¸¦ Çѹø¸¸ »ý¼ºÇÏ°í, constructor ¿¡¼­ ÀÌ ÇÔ¼ö °´Ã¼¸¦ ÂüÁ¶ÇÏ¿´´Ù. ´õ °³¼±ÇÒ ¼ö Àִ°¡? ±×·¸´Ù:

function Person(first, last) {
    this.first = first;
    this.last = last;
}
Person.prototype.fullName = function() {
    return this.first + ' ' + this.last;
}
Person.prototype.fullNameReversed = function() {
    return this.last + ', ' + this.first;
}

Person.prototype Àº Person ÀÇ ¸ðµç °´Ã¼°¡ °øÀ¯ÇÏ´Â °´Ã¼ÀÌ´Ù. "prototype chain" À̶ó´Â °ÍÀ» ¸¸µç´Ù: Person ÀÇ ¼Ó¼ºÀ» Á¢±ÙÇÒ ¶§, Person ÀÌ ÀÌ ¼Ó¼ºÀ» °¡Áö°í ÀÖÁö ¾ÊÀ¸¸é, ÀÚ¹Ù½ºÅ©¸³Æ®´Â Person.prototype ¿¡ ÀÌ ¼Ó¼ºÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÑ´Ù. Áï Person.prototype ¿¡ ¼³Á¤ÇÑ °ÍµéÀº, Person ÀÇ ¸ðµç °´Ã¼µé¿¡¼­ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

ÀÌ°ÍÀº ¾ÆÁÖ °­·ÂÇÏ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼­´Â ¾î¶² °ÍÀÇ prototype À» ¾Æ¹«¶§³ª º¯°æÇÒ ¼ö ÀÖ´Ù. Áï Á¸ÀçÇÏ´Â °´Ã¼¿¡ method ¸¦ Ãß°¡ÇÒ ¼öµµ ÀÖ´Ù:

> s = new Person("Simon", "Willison");
> s.firstNameCaps();
TypeError on line 1: s.firstNameCaps is not a function
> Person.prototype.firstNameCaps = function() {
    return this.first.toUpperCase()
}
> s.firstNameCaps()
SIMON

¶ÇÇÑ, ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ±âº» Á¦°øÇÏ´Â °´Ã¼µéÀÇ prototype ¿¡µµ Ãß°¡°¡ °¡´ÉÇÏ´Ù. String ¿¡, string À» °Å²Ù·Î ¸®ÅÏÇÏ´Â ÇÔ¼ö¸¦ Ãß°¡ÇÏ¿© º¸ÀÚ:

> var s = "Simon";
> s.reversed()
TypeError on line 1: s.reversed is not a function
> String.prototype.reversed = function() {
    var r = "";
    for (var i = this.length - 1; i >= 0; i--) {
        r += this[i];
    }
    return r;
}
> s.reversed()
nomiS

string literal ¿¡µµ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù!

> "This can now be reversed".reversed()
desrever eb won nac sihT

Àá½Ã ¾ð±ÞÇÑ °Íó·³, prototype Àº chain ÇüÅÂÀÌ´Ù. ÀÌ chain ÀÇ root (ÃÖ»óÀ§) ´Â Object.prototype ÀÌ°í ÀÌ prototype Àº toString() À» °¡Áö°í ÀÖ´Ù - °´Ã¼¸¦ ¹®ÀÚ¿­·Î ³ªÅ¸³¾¶§ ÀÌ ÇÔ¼ö°¡ »ç¿ëµÈ´Ù. Person °´Ã¼¸¦ µð¹ö±ëÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù:

> var s = new Person("Simon", "Willison");
> s
[object Object]
> Person.prototype.toString = function() {
    return '<Person: ' + this.fullName() + '>';
}
> s
<Person: Simon Willison>

avg.apply() ÀÇ Ã¹¹ø° ÀÎÀÚ·Î null À» Àü´ÞÇÑ °ÍÀ» ±â¾ïÇϴ°¡? ÀÌÁ¦ ±× ù¹ø° ÀÎÀÚ¸¦ ¼³¸íÇÒ ¼ö ÀÖ´Ù. apply() ÀÇ Ã¹¹ø° ÀÎÀÚ´Â this °¡ µÉ °´Ã¼ÀÌ´Ù. ¿¹¸¦µé¾î new ¸¦ ´ÙÀ½Ã³·³ ±¸ÇöÇÒ ¼ö ÀÖ´Ù:

function trivialNew(constructor) {
    var o = {}; // °´Ã¼¸¦ »ý¼ºÇÑ´Ù
    constructor.apply(o, arguments);
    return o;
}

prototype chain À» ¼³Á¤ÇÏÁö ¾Ê±â ¶§¹®¿¡, new ¶û ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ±â´ÉÀ» ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.

call À̶ó´Â ÇÔ¼ö´Â apply() ¿Í °°Àºµ¥, ÀÎÀÚ¸¦ ¹è¿­´ë½Å, , ±¸ºÐµÈ ÀÎÀÚ ¸ñ·ÏÀ¸·Î ¹Þ´Â´Ù´Â °ÍÀÌ ´Ù¸£´Ù.

function lastNameCaps() {
    return this.last.toUpperCase();
}
var s = new Person("Simon", "Willison");
lastNameCaps.call(s);
// Is the same as:
s.lastNameCaps = lastNameCaps;
s.lastNameCaps();

Inner functions

ÇÔ¼ö ³»¿¡¼­ ´Ù¸¥ ÇÔ¼ö¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. makePerson() ÇÔ¼ö¿¡¼­ ÀÌ¹Ì Çѹø ºÃ¾ú´Ù. Áß¿äÇÑ °ÍÀº, ºÎ¸ð ÇÔ¼öÀÇ scope ¿¡ ÀÖ´Â º¯¼öµéÀ» ¾ÈÂÊ ÇÔ¼ö¿¡¼­ Á¢±ÙÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.

function betterExampleNeeded() {
    var a = 1;
    function oneMoreThanA() {
        return a + 1;
    }
    return oneMoreThanA();
}

ÀÌ ±â´ÉÀº Äڵ带 °ü¸®Çϱâ ÆíÇÏ°Ô ÇØÁØ´Ù. Áï ¾î¶² ÇÔ¼ö°¡ ´Ù¸¥ ÇÔ¼öµéÀ» »ç¿ëÇϴµ¥, ÀÌ ÇÔ¼öµéÀ» ´Ù¸¥ °÷¿¡¼­´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, ÀÌ ÇÔ¼öµéÀ» ÇÔ¼öÀÇ ³»ºÎ¿¡ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. global ¿¡ Á¸ÀçÇÏ´Â ÇÔ¼öÀÇ °¹¼ö¸¦ ÁÙÀÌ´Â °ÍÀº ¾ðÁ¦³ª ÁÁÀº ÀÏÀÌ´Ù.

¶ÇÇÑ, ¾ÈÂÊÀÇ ÇÔ¼ö°¡, ¹Ù±ù ÇÔ¼öÀÇ º¯¼ö¸¦ °øÀ¯ÇÒ ¼ö Àֱ⠶§¹®¿¡, global º¯¼ö¸¦ ¼±¾ðÇÏÁö ¾Ê°í, ÇÔ¼ö¾ÈÀÇ º¯¼ö¸¦ °øÀ¯ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ¹æ¹ýÀ» ÀÌ¿ëÇÒ ¶§¿¡´Â ÁÖÀÇ°¡ ÇÊ¿äÇϳª, À¯¿ëÇÑ ±â´ÉÀÓ¿¡´Â Ʋ¸²¾ø´Ù.

Closures

ÀÚ¹Ù½ºÅ©¸³Æ®°¡ Á¦°øÇÏ´Â °¡Àå °­·ÂÇÏ°íµµ Çò°¥¸®´Â °³³äÁß Çϳª¸¦ ¼³¸íÇÒ Â÷·ÊÀÌ´Ù. ´ÙÀ½ ÄÚµåÀÇ °á°ú´Â ¹«¾ùÀΰ¡?

function makeAdder(a) {
    return function(b) {
        return a + b;
    }
}
x = makeAdder(5);
y = makeAdder(20);
x(6)
?
y(7)
?

makeAdder ¶ó´Â À̸§¿¡ ÈùÆ®°¡ ÀÖ´Ù: Áï »õ·Î¿î add ÇÔ¼ö¸¦ ¸¸µç´Ù. ÀÌ ÇÔ¼ö´Â, ÀÎÀÚ Çϳª¸¦ ¹Þ¾Æ¼­, ÇÔ¼ö »ý¼º½Ã ¹ÞÀº ÀÎÀÚ¿Í ÇÕÇÑ´Ù.

Á»Àü¿¡ º» inner function ¿¡¼­ º» °Í°ú °°Àº ¿ø¸®ÀÌ´Ù: ÇÔ¼ö¾È¿¡ Á¤ÀÇµÈ ÇÔ¼ö´Â, ¹Ù±ù ÇÔ¼öÀÇ º¯¼ö¸¦ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. Â÷ÀÌÁ¡Àº, ¹Ù±ù ÇÔ¼ö°¡ return ÇÏ¿´´Ù´Â °ÍÀÌ´Ù. »ó½ÄÀûÀ¸·Î´Â return ÇÑ ÇÔ¼öÀÇ local º¯¼ö´Â ´õÀÌ»ó Á¸ÀçÇÏÁö ¾Ê°Ô µÈ´Ù. ÇÏÁö¸¸ ±×µéÀº ¿©ÀüÈ÷ Á¸ÀçÇÑ´Ù - ±×·¸Áö ¾Ê´Ù¸é, adder ÇÔ¼ö´Â µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ´õ¿íÀÌ, makeAdder ÀÇ º¯¼öµéÀÇ µÎ°¡Áö "º¹»çº»" ÀÌ Á¸ÀçÇÑ´Ù - ÇÑ °÷¿¡¼­´Â a °¡ 5 ÀÌ°í, ´Ù¸¥ °÷¿¡¼­ a ´Â 20 ÀÌ´Ù. µû¶ó¼­ À§ ÇÔ¼öÀÇ °á°ú´Â ´ÙÀ½°ú °°´Ù:

x(6) // returns 11
y(7) // returns 27

ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ÇÔ¼ö¸¦ ½ÇÇàÇÒ ¶§, ÇÔ¼ö ³»ÀÇ local º¯¼ö¸¦ ÀúÀåÇϱâ À§ÇØ scope °´Ã¼°¡ »ý¼ºµÈ´Ù. scope °´Ã¼´Â, Àü´ÞµÈ ÇÔ¼ö ÀÎÀÚ¿Í ÇÔ²² ÃʱâÈ­µÈ´Ù. ÇÔ¼ö°¡ ½ÇÇàµÉ ¶§¸¶´Ù »õ·Î¿î scope °´Ã¼°¡ »ý¼ºµÇ¸ç, ÀÚ¹Ù½ºÅ©¸³Æ® Äڵ忡¼­ ÀÌ scope °´Ã¼¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¾ø´Ù. Áï ÇöÀç scope °´Ã¼ÀÇ ¼Ó¼ºµéÀ» iterate ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¾ø´Ù.

makeAdder °¡ È£ÃâµÇ¸é, makeAdder ¸¦ È£ÃâÇÒ ¶§ Àü´ÞÇÑ a ¶ó´Â ¼Ó¼ºÀ» °®´Â scope °´Ã¼°¡ »ý¼ºµÈ´Ù. ±×¸®°í makeAdder ´Â »õ·Î »ý¼ºÇÑ ÇÔ¼ö¸¦ ¸®ÅÏÇÑ´Ù. º¸Åë, ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¶§, ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ garbage collector °¡ makeAdder È£Ãâ·Î ÀÎÇØ ¸¸µé¾îÁø scope °´Ã¼¸¦ Áö¿ïÅ×Áö¸¸, ÀÌ ¸®ÅÏµÈ ÇÔ¼ö°¡ scope °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ °¡Áö°í Àֱ⠶§¹®¿¡, scope °´Ã¼°¡ »ç¶óÁöÁö ¾Ê°Ô µÈ´Ù.

Scope °´Ã¼µéÀº scope chain À̶ó ºÒ¸®´Â chain À» Çü¼ºÇÑ´Ù. ¸¶Ä¡ prototype chain ó·³ ¸»ÀÌ´Ù.

closure ´Â ÇÔ¼ö¿Í, ÇÔ¼ö°¡ »ý¼ºµÈ scope °´Ã¼ÀÇ Á¶ÇÕÀÌ´Ù.

closure ¸¦ ÀÌ¿ëÇÏ¿© »óŸ¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù - °´Ã¼ ´ë½Å¿¡ »ç¿ëµÇ°ï ÇÑ´Ù.

Memory leaks

Ŭ·ÎÀú¸¦ »ç¿ëÇϸé Internet Explorer ¿¡¼­ ¸Þ¸ð¸® ´©¼ö¸¦ ¹ß»ýÇϱⰡ ¸Å¿ì ½±´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â garbage collected ¾ð¾îÀÌ´Ù - °´Ã¼ »ý¼º½Ã ¸Þ¸ð¸®°¡ ÇÒ´çµÇ°í, °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶°¡ ¸ðµÎ ¾ø¾îÁú ¶§ ¸Þ¸ð¸®°¡ ÇØÁ¦µÈ´Ù. host ȯ°æ¿¡¼­ Á¦°øÇÏ´Â °´Ã¼µéÀº ±× ȯ°æ¿¡ ÀÇÇØ Ã³¸®µÈ´Ù.

ºê¶ó¿ìÀú host ´Â HTML ÆäÀÌÁö¸¦ Ç¥ÇöÇÏ´Â °´Ã¼µé, Áï DOM ÀÇ °´Ã¼µé, À» °ü¸®ÇÑ´Ù. ºê¶ó¿ìÀú°¡ ÀÌµé °´Ã¼¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í ÇØÁ¦ÇÑ´Ù.

Internet Explorer ´Â À̸¦ À§ÇØ ÀÚ¹Ù½ºÅ©¸³Æ®°¡ Á¦°øÇÏ´Â garbage collection °ú´Â º°µµÀÇ garbage collection À» »ç¿ëÇÑ´Ù. ÀÌ µÎ garbage collection ÀÇ »óÈ£ÀÛ¿ëÀÌ ¸Þ¸ð¸® ´©¼ö¸¦ ¹ß»ý½ÃŲ´Ù.

IE ¿¡¼­ ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼¿Í native °´Ã¼ »çÀÌ¿¡ ¼øȯ ÂüÁ¶°¡ ¸¸µé¾îÁö¸é ¸Þ¸ð¸® ´©¼ö°¡ ¹ß»ýÇÑ´Ù. (¿ªÁÖ: ¿À·¡µÈ ie ¿¡ ´ëÇÑ ¾ê±â·Î, Å©°Ô ½Å°æ¾²Áö ¾Ê¾Æµµ µÈ´Ù..) ´ÙÀ½ ¿¹¸¦ º¸¶ó:

function leakMemory() {
    var el = document.getElementById('el');
    var o = { 'el': el };
    el.o = o;
}

IE ´Â ºê¶ó¿ìÀú°¡ ¿ÏÀüÈ÷ Àç½ÃÀÛ µÉ ¶§±îÁö, el °ú o ÀÇ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÏÁö ¾Ê´Â´Ù.

À§ °æ¿ì´Â ¾Æ¸¶µµ ±×³É ¹«½ÃµÉ °ÍÀÌ´Ù; ¸Þ¸ð¸® ´©¼ö´Â, Å« ÀڷᱸÁ¶¿¡¼­ ¸¹Àº ¾çÀÇ ¸Þ¸ð¸® ´©¼ö¸¦ ¹ß»ý½ÃÅ°°Å³ª, ¹Ýº¹¹®¿¡¼­ ¸Þ¸ð¸® ´©¼ö¸¦ ¹ß»ý½ÃÅ°´Â °æ¿ì¿¡, ¹®Á¦°¡ µÈ´Ù.

ÀÌ·¸°Ô ¸íÈ®È÷ º¸ÀÌÁö ¾Ê´Â ¸Þ¸ð¸® ´©¼öµµ ¸¹ÀÌ ÀÖ´Ù - ¿©·¯ °ã¿¡ °ÉÃÄ ÂüÁ¶¸¦ ÇÏ´Â °æ¿ì¿¡, ¼øȯ ÂüÁ¶°¡ ÀÖÀ½À» ¾Ë±â°¡ ½±Áö ¾Ê´Ù.

Ŭ·ÎÁ®¸¦ ÀÌ¿ëÇÒ ¶§¿¡µµ ¸Þ¸ð¸® ´©¼ö¸¦ ¸¸µé±â ½±´Ù:

function addHandler() {
    var el = document.getElementById('el');
    el.onclick = function() {
        this.style.backgroundColor = 'red';
    }
}

À§ ÄÚµå´Â ¿ä¼Ò°¡ Ŭ¸¯µÇ¾úÀ» ¶§ »¡°£»öÀ¸·Î º¯ÇÏ°Ô ÇÑ´Ù. ¸Þ¸ð¸® ´©¼ö°¡ »ý°å´Ù. À̸§¾ø´Â ³»ºÎ ÇÔ¼ö·Î ÀÎÇØ ¸¸µé¾îÁø closure ¿¡ el ÀÌ Æ÷ÇԵDZ⠶§¹®ÀÌ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼ (³»ºÎ ÇÔ¼ö) ¿¡¼­ el À» ÂüÁ¶ÇÏ°í, native °´Ã¼ el ÀÌ ³»ºÎÇÔ¼ö¸¦ ÂüÁ¶ÇÏ´Â, ¼øÇÑ ÂüÁ¶°¡ ¸¸µé¾îÁ³´Ù.

ÇØ°áÃ¥ÀÌ ¸î°¡Áö ÀÖ´Ù. °¡Àå °£´ÜÇÑ ¹æ¹ýÀº el º¯¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ´Ù:

function addHandler(){
    document.getElementById('el').onclick = function(){
        this.style.backgroundColor = 'red';
    }
}

³î¶ø°Ôµµ, closure ·Î ÀÎÇØ »ý±ä ¼øȯ ÂüÁ¶¸¦ ²÷´Â ÇϳªÀÇ ¹æ¹ýÀ¸·Î »õ·Î¿î closure ¸¦ Ãß°¡ÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù:

function addHandler() {
    var clickHandler = function() {
        this.style.backgroundColor = 'red';
    };
    (function() {
        var el = document.getElementById('el');
        el.onclick = clickHandler;
    })();
}

¾ÈÂÊ ÇÔ¼ö´Â Áï½Ã ½ÇÇàµÇ¸ç, clickHandler ·Î ÀÎÇØ »ý¼ºµÈ closure ·Î ºÎÅÍ ÀÚ½ÅÀÇ ³»¿ë (¿ªÁÖ: el) À» ¼û±ä´Ù.

¶Ç ´Ù¸¥ ¹æ¹ýÀº window.onunload event ¿¡¼­ ¼øȯÂüÁ¶¸¦ ²÷´Â °ÍÀÌ´Ù. ¸¹Àº event ¶óÀ̺귯¸®µéÀÌ ÀÌ·¸°Ô ÇÑ´Ù. bfcache in firefox 1.5 ±â´ÉÀ» ²ô±â ¶§¹®¿¡, ´Ù¸¥ ÀÌÀ¯°¡ ÀÖÁö ¾Ê´ÂÇÑ, firefox ¿¡¼­´Â unload ¸®½º³Ê¸¦ µî·ÏÇÏÁö ¸»¾Æ¶ó.

Original Document Information

  • Author: Simon Willison
  • Last Updated Date: March 7, 2006
  • Copyright: © 2006 Simon Willison, contributed under the Creative Commons: Attribute-Sharealike 2.0 license.
  • More information: For more information about this tutorial (and for links to the original talk's slides), see Simon's Etech weblog post.
ÃßõÃßõ : 403 Ãßõ ¸ñ·Ï
¹øÈ£ Á¦¸ñ
2,885
input ÀÔ·Â ÇÊµå ¾ÕµÚ °ø¹é ½Ç½Ã°£ Á¦°Å
2,884
Placeholder Æ÷Ä¿½º½Ã °¨Ãß±â
2,883
MySQL Áߺ¹µÈ µ¥ÀÌÅ͸¦ »èÁ¦
2,882
MySQL Áߺ¹ µ¥ÀÌÅÍ È®ÀÎ
2,881
sessionStorage.getItem ¿Í sessionStorage.setItem
2,880
Á¦ÀÌÄõ¸® ·£´ýÀ¸·Î ¹è°æ»ö º¯°æ
2,879
preg match¿¡ °üÇÑ Á¤±Ô½Ä
2,878
Stream an audio file with MediaPlayer ¿Àµð¿À ÆÄÀÏ ½ºÆ®¸®¹Ö Çϱâ
2,877
Audio Streaming PHP Code
2,876
PHP $ SERVER ȯ°æ º¯¼ö Á¤¸®
2,875
Vimeo (ºñ¸Þ¿À) API ¸¦ »ç¿ëÇÏ¿© Ç÷¹À̾î ÄÁÆ®·ÑÇϱâ
2,874
iframe »ç¿ë½Ã ÇÏ´Ü¿¡ ¹ß»ýÇÏ´Â °ø¹é Á¦°Å¹æ¹ý
2,873
¾ÆÀÌÇÁ·¹ÀÓ(iframe) Àüüȭ¸é °¡´ÉÇÏ°Ô Çϱâ
2,872
ºÎÆ®½ºÆ®·¦(bootstrapk)¿¡¼­ »ç¿ëÇÏ´Â class¸í Á¤¸®
2,871
ºÎÆ®½ºÆ®·¦ CSS
2,870
Å©·Ò¿¡¼­ ¸¶Áø Á¶Àý
2,869
PHP ÇöÀç ÆäÀÌÁöÀÇ µµ¸ÞÀθíÀ̳ª urlµîÀÇ Á¤º¸ ¾Ë¾Æ¿À±â
2,868
PHP preg match all()
2,867
PHP ·Î À¥ÆäÀÌÁö ±Ü¾î¿À±â ¸ðµç ¹æ¹ý ÃÑÁ¤¸®!
2,866
[PHP] ¿ø°ÝÁö ÆÄÀÏ ÁÖ¼Ò ³ëÃâ ¾ÈÇÏ°í curl·Î ´Ù¿î·Îµå ¹Þ±â
2,865
PHP ÇÔ¼ö Á¤¸®
2,864
¾ÆÀÌÇÁ·¹ÀÓ(iframe) ºñÀ² À¯ÁöÇϸ鼭 Å©±â Á¶ÀýÇÏ´Â ¹æ¹ý
2,863
PHP ¹è¿­¿¡¼­ ¹«ÀÛÀ§·Î Çϳª »Ì¾ÆÁÖ´Â array rand() ÇÔ¼ö
2,862
PHP Á¤±Ô½Ä Á¤¸®
2,861
PHP Á¤±Ô½ÄÀ» È°¿ëÇÑ ÅÂ±× ¹× ƯÁ¤ ¹®ÀÚ¿­ Á¦°Å ¹× ÃßÃâ ¹æ¹ý
2,860
php Å©·Ñ¸µ ¶Ç´Â ÆÄ½Ì ÇÔ¼ö, Á¤±Ô½Ä ¸ðÀ½
2,859
Á¦ÀÌÄõ¸® ±âº» ¸í·É¾î
2,858
À¥ÆäÀÌÁö °¡·Î ¸ðµå¼¼·Î ¸ðµå ÀνÄÇϱâ
2,857
¸ð¹ÙÀÏ À¥ È­¸é °­Á¦ ȸÀü(°¡·Î¸ðµå °íÁ¤)
2,856
[HTML5]¿¡¼­ frameset ´ëü ¹æ¹ý°ú iframe ¼Ó¼º
¸ñ·Ï
¹ÂÁ÷Æ®·ÎÆ® ºÎ»ê±¤¿ª½Ã ºÎ»êÁø±¸ °¡¾ßµ¿ ¤Ó °³ÀÎÁ¤º¸Ãë±Þ¹æħ
Copyright ¨Ï musictrot All rights reserved.