MDNì JavaScript ì´ê¸ì ê³¼ì ì ì¤ì 걸 íìí©ëë¤! ì´ ê¸ììë "JavaScriptë 무ìì¸ê°ì?", "JavaScriptë¡ ë¬´ìì í ì ìëì?"ì ê°ì ì§ë¬¸ì ëµíë©° JavaScriptì ì©ëì ìµìí´ì§ëë¡ ëì ìì¤ìì JavaScript를 ì´í´ë³¼ ê²ì ëë¤.
íìí ì¬ì ì§ì: 기본ì ì¸ ì»´í¨í° ì´í´ ë¥ë ¥, HTMLê³¼ CSS 기ì´. 목í: JavaScriptê° ëì§, ì´ë¤ ì¼ì í ì ìëì§, ì¹ ì¬ì´í¸ì ì´ë»ê² ì ì©íëì§ ìì보기 ì기. ëì ìì¤ì ì ìJavaScriptë ì¹ íì´ì§ìì ë³µì¡í 기ë¥ì 구íí ì ìë ì¤í¬ë¦½í ëë íë¡ê·¸ëë° ì¸ì´ì ëë¤. ì¹ íì´ì§ê° ë¨ìí ì ì ì¸ ì 보를 íìíë ê² ì´ìì¼ë¡ ììì ì í ì½í ì¸ ì ë°ì´í¸, ëíí ì§ë, ì ëë©ì´ì 2D/3D ê·¸ëí½, ì¤í¬ë¡¤ë§ ë¹ëì¤ ì£¼í¬ë°ì¤ ë±ì íìí ëë§ë¤ JavaScriptê° ê´ë ¨ëì´ ìì ê°ë¥ì±ì´ ëìµëë¤. JavaScriptë íì¤ ì¹ ê¸°ì ì´ë¼ë ì¼ì´í¬ì ì¸ ë²ì§¸ 층ì ëë¤. ë¤ë¥¸ ë ê°(HTMLê³¼ CSS)ë íìµì¥ì ë¤ë¥¸ ê³³ìì ìì¸í ììë´¤ìµëë¤.
ì¸ ê°ì§ ë ì´ì´ê° ìë¡ ì ì´ì¸ë¦½ëë¤. ê°ë¨í í ì¤í¸ ë ì´ë¸ì ìë¡ ë¤ì´ ë³´ê² ìµëë¤. HTMLì ì¬ì©íì¬ êµ¬ì¡°ì 목ì ì ë¶ì¬í기 ìí´ ë§í¬ì í ì ììµëë¤.
CSS를 ì¶ê°íë©´ 보기 ì¢ê² ê¾¸ë° ì ììµëë¤.
p {
font-family: "helvetica neue", helvetica, sans-serif;
letter-spacing: 1px;
text-transform: uppercase;
text-align: center;
border: 2px solid rgb(0 0 200 / 0.6);
background: rgb(0 0 200 / 0.6);
color: rgb(255 255 255 / 1);
box-shadow: 1px 1px 2px rgb(0 0 200 / 0.4);
border-radius: 10px;
padding: 3px 10px;
display: inline-block;
cursor: pointer;
}
ë§ì§ë§ì¼ë¡ë JavaScript를 ê³ë¤ì¬ ëì ì¸ ê¸°ë¥ì ì¶ê°í ì ììµëë¤.
const para = document.querySelector("p");
para.addEventListener("click", updateName);
function updateName() {
const name = prompt("Enter a new name");
para.textContent = `Player 1: ${name}`;
}
ì´ ë§ì§ë§ ë²ì ì í ì¤í¸ ë ì´ë¸ì í´ë¦íì¬ ì´ë¤ ì¼ì´ ë°ìíëì§ íì¸í´ ë³´ì¸ì. (ì´ ë°ëª¨ë GitHubìì ì°¾ì ì ììµëë¤ - ìì¤ì½ë ëë ì¤íë 모ìµì íì¸í´ë³´ì¸ì)
JavaScriptë ì´ê²ë³´ë¤ í¨ì¬ ë§ì ì¼ì í ì ììµëë¤. ì´ë¤ ì¼ì´ ê°ë¥íì§ ìì¸í ììë´ ìë¤.
ê·¸ëì ì´ë¤ ì¼ì í ì ìëì?í´ë¼ì´ì¸í¸ ì¬ì´ë JavaScript ì¸ì´ì íµì¬ì ë¤ìê³¼ ê°ì ì¼ì ê°ë¥íê² í´ì£¼ë íë¡ê·¸ëë° ê¸°ë¥ë¤ë¡ 구ì±ë©ëë¤.
name
ì´ë¼ë ë³ìì ì ì¥í©ëë¤.name
ë³ìì ê°ì í©ì³ ì¨ì í í
ì¤í¸ ë ì´ë¸("Player 1: Chris")ì ìì±í©ëë¤.click
ì´ë²¤í¸ë¥¼ ì¬ì©íì¬ ë ì´ë¸ì´ í´ë¦ë ìì ì ê°ì§í ë¤ì í
ì¤í¸ ë ì´ë¸ì ì
ë°ì´í¸íë ì½ë를 ì¤ííìµëë¤.íì§ë§ ëì± í¥ë¯¸ë¡ì´ ê²ì í´ë¼ì´ì¸í¸ 측 JavaScript ì¸ì´ ìì 구ì¶ë 기ë¥ì ëë¤. ì í리ì¼ì´ì íë¡ê·¸ëë° ì¸í°íì´ì¤(API)ë¼ê³ ë¶ë¥´ë ì´ ê¸°ë¥ë¤ì JavaScript ì½ëìì ì¬ì©í ì ìë ê°ë ¥í ë§ë²ì ì¶ê°ë¡ ì ê³µí©ëë¤.
APIë ê°ë°ìê° êµ¬íí기 ì´ë µê±°ë ë¶ê°ë¥í íë¡ê·¸ë¨ì 구íí ì ìëë¡ ë¯¸ë¦¬ ë§ë¤ì´ì ì ê³µíë ê²ì ëë¤. 기ì±í ê°êµ¬ í¤í¸ë¡ ì§ì ì§ë ê²ê³¼ ëì¼í ë°©ìì¼ë¡ íë¡ê·¸ëë°í ì ììµëë¤. ì§ì ëìì¸ì 구ìíê³ , ì¬ë°ë¥¸ 목ì¬ë¥¼ ì°¾ê³ , 모ë í¨ëì ì¬ë°ë¥¸ í¬ê¸°ì 모ìì¼ë¡ ìë¥´ê³ , ì¬ë°ë¥¸ í¬ê¸°ì ëì¬ë¥¼ ì°¾ìì ì± ì¥ì ë§ëë ê²ë³´ë¤ 기ì±í í¨ëì ëì¬ë¡ ê³ ì íì¬ ì± ì¥ì ë§ëë ê²ì´ í¨ì¬ ì½ìµëë¤.
APIë ì¼ë°ì ì¼ë¡ ë ê°ì ë²ì£¼ë¡ ëë©ëë¤.
ë¸ë¼ì°ì APIë ì¹ ë¸ë¼ì°ì ì ë´ì¥ëì´ ìì¼ë©°, ì£¼ë³ ì»´í¨í° íê²½ì ë°ì´í°ë¥¼ ë ¸ì¶íê±°ë ì ì©í ë³µì¡í ìì ì ìíí ì ììµëë¤.
DOM (Document Object Model) API
를 ì¬ì©íë©´ HTMLê³¼ CSS를 ì¡°ìíì¬ HTMLì ìì±, ì ê±° ë° ë³ê²½íê³ íì´ì§ì ì ì¤íì¼ì ëì ì¼ë¡ ì ì©íë ë±ì ìì
ì ìíí ì ììµëë¤. ì를 ë¤ì´ íì´ì§ì íì
ì°½ì´ ëíëê±°ë ìë¡ì´ ì½í
ì¸ ê° íìë ëë§ë¤(ìì ê°ë¨í ë°ëª¨ìì ë³´ìë¯ì´) DOMì´ ìëíë ê²ì
ëë¤.Geolocation API
ë¡ ì§ë¦¬ì 보를 ê°ì ¸ì¬ ì ììµëë¤. ì´ê²ì´ Google ì§ëê° ì¬ì©ìì ìì¹ë¥¼ ì°¾ì ì§ëì íìíë ë°©ë²ì
ëë¤.Canvas
ì WebGL
API를 ì¬ì©íë©´ ì ëë©ì´ì
2D ë° 3D ê·¸ëí½ì ë§ë¤ ì ììµëë¤. ë ì¹ ê¸°ì ì ì¬ì©í´ì ë§ë¤ ì ìë ëë¼ì´ 결과를 ì¿ë³´ë ¤ë©´ Chrome Experimentsì webglsamples를 방문íì¸ì.HTMLMediaElement
ì WebRTC
를 í¬í¨íë ì¤ëì¤ì ë¹ëì¤ API를 ì¬ì©íë©´ ì¹ íì´ì§ìì ë°ë¡ ì¤ëì¤ ë° ë¹ëì¤ë¥¼ ì¬ìíê±°ë ì¹ ì¹´ë©ë¼ìì ë¹ëì¤ë¥¼ ê°ì ¸ì ë¤ë¥¸ ì¬ëì ì»´í¨í°ì íìíë ë± ë©í°ë¯¸ëì´ë¡ ì ë§ í¥ë¯¸ë¡ì´ ìì
ì í ì ììµëë¤. (ê°ë¨í ì¤ë
ì· ë°ëª¨ë¥¼ 방문í´ì ê°ì ì¡ìë³´ì¸ì.)ì°¸ê³ : ìì ë°ëª¨ ì¤ ìë¹ìë 구í ë¸ë¼ì°ì ìì ìëíì§ ìì¼ë¯ë¡ ì¤íí ëë Firefox, Chrome, Edge, Operaì ê°ì ìµì ë¸ë¼ì°ì 를 ì¬ì©íì¬ ì½ë를 ì¤ííë ê²ì´ ì¢ìµëë¤. ì´íì íë¡ëì ì½ë (ê³ ê°ì´ ì¬ì©íê² ë ì½ë) ë°°í¬ì ë¤ê°ê°ê² ëë©´ í¬ë¡ì¤ ë¸ë¼ì°ì í ì¤í¸ë¥¼ ê³ ë ¤íì¸ì.
ìëíí° APIë 기본ì ì¼ë¡ ë¸ë¼ì°ì ì ë´ì¥ëì´ ìì§ ìì¼ë©°, ì¼ë°ì ì¼ë¡ ì¹ ì´ëê°ìì í´ë¹ ì½ëì ì 보를 ê°ì ¸ìì¼ í©ëë¤.
ì°¸ê³ : ìì ìëíí° APIë ê³ ê¸ ê¸°ë¥ì¼ë¡, ì´ ê³¼ì ììë ë¤ë£¨ì§ ììµëë¤. ì´ì ëí ìì¸í ë´ì©ì í´ë¼ì´ì¸í¸ ì¬ì´ë ì¹ API ê³¼ì ìì ììë³´ì¸ì.
ì¬ê¸° ëì´ë í목 ë§ê³ ë í¨ì¬ ë¤ìí APIë¤ì´ ì¡´ì¬í©ëë¤! íì§ë§ ìì§ ë무 ììëê°ì§ ë§ì¸ì. JavaScript를 í루 ë°°ì´ ê²ì¼ë¡ ì°¨ì¸ë Facebook, Google ì§ë, Instagramì ë§ë¤ ìë ìë ë²ì ëë¤. ìì§ ë°°ìì¼ í ê¸°ë³¸ì´ ë§ì´ ë¨ìê³ , 기본ì ë°°ì°ë ê²ì´ ì´ ê³¼ì ì ë³´ë ì´ì ì´ë, ììí´ ë´ ìë¤!
ì¹ íì´ì§ìì JavaScriptë ì´ë¤ ì¼ì íëì?ì¬ê¸°ìë ì¤ì ë¡ ëª ê°ì§ ì½ë를 ì´í´ë³´ë©´ì íì´ì§ìì JavaScript를 ì¤ííë©´ ì¤ì ë¡ ì´ë¤ ì¼ì´ ì¼ì´ëëì§ ì´í´ë³´ê² ìµëë¤.
ë¸ë¼ì°ì ìì ì¹ íì´ì§ë¥¼ ë¡ëí ë ì´ë¤ ì¼ì´ ì¼ì´ëëì§ ê°ë¨í ì ë¦¬í´ ë³´ê² ìµëë¤. (CSS ëì ë°©ììì 먼ì ììë´¤ìµëë¤.) ë¸ë¼ì°ì ìì ì¹ íì´ì§ë¥¼ ë¡ëíë©´ ì¤í íê²½(ë¸ë¼ì°ì í) ë´ìì ì½ë(HTML, CSS ë° JavaScript)를 ì¤ííê² ë©ëë¤. ì´ë ìì¬ë£(ì½ë)를 ë°ì ì í(ì¹ íì´ì§)ì ì¶ë ¥íë ê³µì¥ê³¼ ê°ìµëë¤.
JavaScriptì ê°ì¥ ì¼ë°ì ì¸ ì©ëë ììì ì¸ê¸íë¯ì´ DOM (Document Object Model) API를 íµí´ HTMLê³¼ CSS를 ëì ì¼ë¡ ìì íì¬ ì¬ì©ì ì¸í°íì´ì¤ë¥¼ ì ë°ì´í¸íë ê²ì ëë¤. ì¹ ë¬¸ìì ì½ëë ì¼ë°ì ì¼ë¡ íì´ì§ì íìëë ììëë¡ ë¡ëëê³ ì¤íë©ëë¤. ìì íë ¤ë HTMLê³¼ CSS ì½ëë³´ë¤ JavaScript를 먼ì ë¶ë¬ì ì¤íí´ë²ë¦¬ë©´ ì¤ë¥ê° ë°ìí ì ììµëë¤. ì´ ê¸ì ë·ë¶ë¶ì ìë ì¤í¬ë¦½í¸ ë¡ë© ì ëµìì ì´ ë¬¸ì ì í´ê²°ë²ì ììë³´ê² ìµëë¤.
ë¸ë¼ì°ì ë³´ìê° ë¸ë¼ì°ì íìë ì½ë를 ì¤íí ì ìë ë³ëì ê·¸ë¦ì´ ììµëë¤. (ì 문 ì©ì´ë¡ 'ì¤í íê²½'ì´ë¼ê³ ë¶ë¦ ëë¤.) ëë¶ë¶ì ê²½ì° ê° íì ì½ëë ìì í ë 립ì ì¼ë¡ ì¤íëë©° í íì ì½ëê° ë¤ë¥¸ íì´ë ë¤ë¥¸ ì¹ì¬ì´í¸ì ì½ëì ì§ì ì ì¸ ìí¥ì ë¯¸ì¹ ì ììµëë¤. ì´ê±´ ì¤ìí ë³´ì ì ì°¨ì ëë¤. ì´ë° ì ì½ì´ ìì¼ë©´ í´ì»¤ë¤ì´ ë¤ë¥¸ ì¹ì¬ì´í¸ì ì 보를 íì¹ë ì½ë를 ìì±íë ë± ëì ì§ì í ì ì기 ë문ì ëë¤.
ì°¸ê³ : ìë¡ ë¤ë¥¸ ì¹ ì¬ì´í¸/í ì¬ì´ìì ì½ëì ì 보를 ìì íê² ì£¼ê³ ë°ì ì ìë ë°©ë²ì´ ìì§ë§, ì§ê¸ ê³¼ì ê³¼ë ê±°ë¦¬ê° ë©ê¸° ë문ì ì¬ê¸°ìë ë¤ë£¨ì§ ìê² ìµëë¤.
JavaScript ì¤í ììë¸ë¼ì°ì ê° JavaScript ë¸ë¡ì ë§ì£¼ì¹ë©´, ì¼ë°ì ì¼ë¡ë ììëë¡ ììì ìëë¡ ì¤íí©ëë¤. ë°ë¼ì ì½ë ë°°ì¹ ìììë 주ì를 기ì¸ì¬ì¼ í©ëë¤. ì를 ë¤ê¸° ìí´ ë§¨ ìì 첫 ìì ì½ëë¡ ëìê°ë´ ìë¤.
const para = document.querySelector("p");
para.addEventListener("click", updateName);
function updateName() {
const name = prompt("Enter a new name");
para.textContent = `Player 1: ${name}`;
}
ì ì½ëë í
ì¤í¸ ë¨ë½ì ì í(1ë² ì¤)í´ì ì´ë²¤í¸ ìì 기를 첨ë¶(3ë² ì¤)íì¬, ì¬ì©ìê° ë¨ë½ì í´ë¦íë©´ updateName()
ì½ë ë¸ë¡(5ë² ~ 8ë² ì¤)ì ì¤ííëë¡ í©ëë¤. updateName()
ì½ë ë¸ë¡(ì´ë ê² ì¬ì¬ì© ê°ë¥íëë¡ ëë ëì ì½ë ë¸ë¡ì "í¨ì"ë¼ê³ í©ëë¤)ì ì ì´ë¦ì ìì²í ë¤ì í´ë¹ ì´ë¦ì ë¨ë½ì ì½ì
íì¬ íì를 ì
ë°ì´í¸í©ëë¤.
ì½ëì ì²ì ë ì¤ì ìì를 ë°ê¾¸ë©´ ë ì´ì ìëíì§ ìê³ ë¸ë¼ì°ì ê°ë°ì ì½ìì ì¤ë¥ TypeError: para is undefined
ê° ëíë©ëë¤. para
ê°ì²´ê° ìì§ ì¡´ì¬íì§ ìì¼ë¯ë¡ ì´ë²¤í¸ ìì 기를 ì¶ê°í ì ì기 ë문ì
ëë¤.
ì°¸ê³ : ì´ë ë§¤ì° íí ì¤ë¥ë¡, ì½ëìì 참조íë ê°ì²´ê° ì¤ì ë¡ ì¡´ì¬íëì§ íì¸í íì ìì ì ìíí´ì¼ í©ëë¤.
ì¸í°í리í°ì ì»´íì¼ë¬íë¡ê·¸ëë°ìì ì¸í°í리í°ì ì»´íì¼ë¬ë¼ë ì©ì´ë¥¼ ë¤ì´ë´¤ì ê²ì ëë¤. ì¸í°í리í°ë¥¼ ì¬ì©íë ì¸ì´ììë ì½ëê° ììì ìëë¡ ì¤íëê³ ì½ë ì¤í ê²°ê³¼ê° ì¦ì ë°íë©ëë¤. ë¸ë¼ì°ì ìì ì½ë를 ì¤íí기 ì ì ì½ë를 ë¤ë¥¸ ííë¡ ë³íí íìê° ììµëë¤. ì½ëë íë¡ê·¸ë머ìê² ì¹ìí í ì¤í¸ íìì¼ë¡ ìì ëì´ ë°ë¡ ì²ë¦¬ë©ëë¤.
ë°ë©´, ì»´íì¼ë¬ë¥¼ ì¬ì©íë ì»´íì¼ ì¸ì´ë ì»´í¨í°ìì ì¤íë기 ì ì ë¤ë¥¸ ííë¡ ë³í(ì»´íì¼)ë©ëë¤. ì를 ë¤ì´, C/C++ììë ì½ë를 ì»´íì¼ë¬ë¡ 기ê³ì¸ì´ë¡ ë³ííì¬, ê·¸ 결과를 ì»´í¨í°ê° ì¤íí©ëë¤. íë¡ê·¸ë¨ì íë¡ê·¸ë¨ì ì본 ìì¤ ì½ëìì ìì±ë ì´ì§ íì(ë°ì´ë리)ì¼ë¡ë¶í° ì¤íë©ëë¤.
JavaScriptë ê°ë³ê³ , ì¸í°í리í°ë¥¼ ì¬ì©íë íë¡ê·¸ëë° ì¸ì´ì ëë¤. ì¹ ë¸ë¼ì°ì ë JavaScript ì½ë를 ì문 í ì¤í¸ íìì¼ë¡ ì ë ¥ë°ì ì¤íí©ëë¤. 기ì ì ì¸ ì¸¡ë©´ì¼ë¡ ë°ì§ìë©´, ëë¶ë¶ì 모ë JavaScript ì¸í°í리í°ë¤ì ì¤ì ì±ë¥ í¥ìì ìí´ JIT ì»´íì¼(just-in-time ì»´íì¼)ì´ë¼ë 기ì ì ì¬ì©íëë°, ì¤í¬ë¦½í¸ì ì¤íê³¼ ëìì ìì¤ ì½ë를 ë ë¹ ë¥´ê² ì¤íí ì ìë ì´ì§ ííë¡ ë³ííì¬ ìµëí ëì ì¤í ìë를 ì»ë ë°©ë²ì ëë¤. íì§ë§ ì»´íì¼ì´ 미리 ì²ë¦¬ëë ê²ì´ ìëë¼ ë°íìì ì²ë¦¬ë기 ë문ì JavaScriptë ì¬ì í ì¸í°íë¦¬í° ì¸ì´ë¡ ë¶ë¥ë©ëë¤.
ë ë°©ë² ëª¨ë ê°ìì ì¥ì ì ê°ì§ê³ ìì¼ë, ì¬ê¸°ì ê·¸ ë¶ë¶ê¹ì§ ë ¼íì§ë ìê² ìµëë¤.
ìë² ì¬ì´ëì í´ë¼ì´ì¸í¸ ì¬ì´ë ì½ëì¹ ê°ë°ì ë§¥ë½ìì ìë² ì¬ì´ë ì½ëì í´ë¼ì´ì¸í¸ ì¬ì´ë ì½ë를 ë¤ì´ë´¤ì ê²ì ëë¤. í´ë¼ì´ì¸í¸ ì¬ì´ë ì½ëë ì¬ì©ìì ì»´í¨í°ìì ì¤íëë ì½ëë¡, ì¹ íì´ì§ë¥¼ ë³¼ ë íì´ì§ì í´ë¼ì´ì¸í¸ 측 ì½ëê° ë¤ì´ë¡ëë í ì¤íëì´ ë¸ë¼ì°ì ì íìë©ëë¤. ì´ ê³¼ì ìì ë¤ë£¨ë ê²ì, ì ííë í´ë¼ì´ì¸í¸ ì¬ì´ë JavaScriptì ëë¤.
ë°ëë¡ ìë² ì¬ì´ë ì½ëë ìë²ìì ì¤íëê³ ê·¸ ê²°ê³¼ê° ë¤ì´ë¡ëëì´ ë¸ë¼ì°ì ì íìë©ëë¤. ì¸ê¸° ìë ìë² ì¬ì´ë ì¹ ì¸ì´ë¡ë PHP, Python, Ruby, ASP.NET, ê·¸ë¦¬ê³ JavaScriptê° ììµëë¤! JavaScriptë ë¸ë¼ì°ì ë¿ë§ ìëë¼, ë§ì ì¬ëë¤ì´ ì¬ì©íë Node.js íê²½ì²ë¼ ìë² ì¬ì´ë ì¸ì´ë¡ë ì¬ì©í ì ììµëë¤. ìë² ì¬ì´ë JavaScriptì ê´í´ìë ëì ì¹ ì¬ì´í¸ â ìë² ì¬ì´ë íë¡ê·¸ëë° ê³¼ì ìì ë ììë³´ì¸ì.
ëì ì½ëì ì ì ì½ëëì ì´ë¼ë ë¨ì´ë í´ë¼ì´ì¸í¸ ì¬ì´ë JavaScriptì ìë² ì¬ì´ë ì¸ì´ë¥¼ 모ë ì¤ëª íë ë° ì¬ì©ëë©°, ì¹ íì´ì§/ì¹ ì±ì ëì¤íë ì´ë¥¼ ì ë°ì´í¸íì¬ ìí©ì ë°ë¼ ë¤ë¥¸ ë´ì©ì íìíê³ íìì ë°ë¼ ì ì½í ì¸ ë¥¼ ìì±íë 기ë¥ì ì미í©ëë¤. ìë² ì¬ì´ë ì½ëë ë°ì´í°ë² ì´ì¤ìì ë°ì´í°ë¥¼ ê°ì ¸ì¤ë ë± ìë²ìì ì ì½í ì¸ ë¥¼ ëì ì¼ë¡ ìì±íë ë°ë©´, í´ë¼ì´ì¸í¸ ì¬ì´ë JavaScriptë ì HTML í를 ìì±íê³ ìë²ìì ìì²í ë°ì´í°ë¡ ì±ì´ ë¤ì ì¬ì©ììê² íìëë ì¹ íì´ì§ì í ì´ë¸ì íìíë ë± í´ë¼ì´ì¸í¸ ë¸ë¼ì°ì ë´ë¶ìì ì ì½í ì¸ ë¥¼ ëì ì¼ë¡ ìì±í©ëë¤. ë ê°ì§ ë§¥ë½ìì ì미ë ì½ê° ë¤ë¥´ì§ë§ ìë¡ ì°ê´ëì´ ìì¼ë©° ì¼ë°ì ì¼ë¡ ë ê°ì§ ì ê·¼ ë°©ì(ìë²ì í´ë¼ì´ì¸í¸ ì¬ì´ë)ì´ í¨ê» ìëí©ëë¤.
ëì ì¼ë¡ ë°ëë ë´ì©ì´ ìë ì¹ íì´ì§ë¥¼ ì ì ì¸ íì´ì§ë¼ê³ íë©°, íì ëì¼í ì½í ì¸ ë§ íìí©ëë¤.
ì¹ íì´ì§ì JavaScript를 ì´ë»ê² ë£ëì?JavaScriptë CSSì ì ì¬í ë°©ìì¼ë¡ HTML íì´ì§ì ì ì©ë©ëë¤. CSSê° ì¸ë¶ ì¤íì¼ìí¸ë¥¼ ì ì©íë ë° <link>
ìì를 ì¬ì©íê³ ë´ë¶ ì¤íì¼ìí¸ë¥¼ ì ì©íë ë° <style>
ìì를 ì¬ì©íë ë°ë©´, JavaScriptë HTMLì ì¸ê³ìì ë¨ íëì ì¹êµ¬ì¸ <script>
ììë§ ìì¼ë©´ ë©ëë¤. ì´ê²ì´ ì´ë»ê² ìëíëì§ ììë´
ìë¤.
먼ì , ìì íì¼ì¸ apply-javascript.htmlì ì¬ë¬ë¶ì ì»´í¨í°ë¡ ë³µì¬íì¸ì. ì ë¹í í´ëì ì ì¥íë©´ ë©ëë¤.
ë¸ë¼ì°ì ì í ì¤í¸ í¸ì§ê¸°ë¡ 1ë²ì íì¼ì ì¬ì¸ì. HTML ì½ëê° í´ë¦ ê°ë¥í ë²í¼ íë를 í¬í¨íë ê°ë¨í ì¹ íì´ì§ë¥¼ ë§ëë ê²ì íì¸í ì ììµëë¤.
í
ì¤í¸ í¸ì§ê¸°ë¡ ê°ì ìëì ì½ë를 ì¶ê°íì¸ì. ë«ë </head>
íê·¸ ë°ë¡ ìì ë£ì´ì£¼ì¸ì.
<script>
// JavaScript goes here
</script>
ì´ì <script>
ìì ìì JavaScript를 ë£ì´ì ì¹ íì´ì§ë¥¼ ì¡°ê¸ í¥ë¯¸ë¡ê² ë§ë¤ì´ë³´ê² ìµëë¤. ìë ì½ë를 "// JavaScript goes here" ë°ë¡ ìëì ë£ì´ì£¼ì¸ì.
document.addEventListener("DOMContentLoaded", () => {
function createParagraph() {
const para = document.createElement("p");
para.textContent = "You clicked the button!";
document.body.appendChild(para);
}
const buttons = document.querySelectorAll("button");
for (const button of buttons) {
button.addEventListener("click", createParagraph);
}
});
íì¼ì ì ì¥íê³ ë¸ë¼ì°ì ìì íì´ì§ë¥¼ ìë¡ê³ 침íì¸ì. ì´ì ë²í¼ì í´ë¦íë ìê° ìë¡ì´ 문ë¨ì´ ìì±ë¼ ë°ì ì¶ê°ëë 모ìµì ë³¼ ì ììµëë¤.
ì°¸ê³ : ìì ê° ì ëìíì§ ìì¼ë©´ ê° ë¨ê³ë¥¼ ë¤ì 차근차근 ìëíë©´ì 모ë ì íí ë°ë¼íëì§ íì¸í´ë³´ì¸ì. ìì ì½ë를 ì ì¥í ë .html
íì¼ë¡ ì ì¥íëì? <script>
ìì를 ë«ë </head>
ìì ë°ë¡ ìì ë°°ì¹íëì? JavaScript ì½ë를 ì íí ë³´ì´ë ê·¸ëë¡ ì
ë ¥íëì? JavaScriptë ëì문ì를 구ë³íê³ ë§¤ì° ê¹ë¤ë¡ì°ë¯ë¡ 구문ì ìì ê·¸ëë¡ ì
ë ¥íì§ ìì¼ë©´ ëìíì§ ìì ì ììµëë¤.
ì°¸ê³ : ìì±ë ìì ì½ë를 GitHubì apply-javascript-internal.htmlìì ë³¼ ì ììµëë¤. (ì¤ì ë¡ ëìíë 모ìµë íì¸í´ë³´ì¸ì)
ì¸ë¶ JavaScriptë´ë¶ JavaScriptë ì ëìíì§ë§, JavaScript를 ì¸ë¶ íì¼ë¡ ë¶ë¦¬íê³ ì¶ì¼ë©´ ì´ë¡í ê¹ì? ì§ê¸ë¶í° ì´í´ë´ ìë¤.
ìì HTML íì¼ê³¼ ê°ì í´ëì ìë¡ì´ íì¼ì ë§ëì¸ì. script.js
ë¼ë ì´ë¦ì ë¶ì¬ì¤ëë¤. íì¼ íì¥ìê° .jsì¬ì¼ JavaScriptë¡ ì¸ìëë¯ë¡ ì´ íì¥ì를 ì¬ì©íì¸ì.
íì¬ <script>
ìì를 ë¤ì ì½ëë¡ ëì²´íì¸ì.
<script src="script.js" defer></script>
script.js
íì¼ ìì ìë ë´ì©ì ì
ë ¥íì¸ì.
function createParagraph() {
const para = document.createElement("p");
para.textContent = "You clicked the button!";
document.body.appendChild(para);
}
const buttons = document.querySelectorAll("button");
for (const button of buttons) {
button.addEventListener("click", createParagraph);
}
ì ì¥íê³ ë¸ë¼ì°ì 를 ìë¡ê³ 침íì¸ì. ìê¹ì ê°ì 모ìµì ë³¼ ì ììµëë¤! ë¶ëª í ëìì ê°ì§ë§, JavaScript íì¼ì ì¸ë¶ íì¼ë¡ ë¶ë¦¬í ì ìììµëë¤. ì¼ë°ì ì¼ë¡ ì½ë를 ì²´ê³ì ì¼ë¡ ì 리íê³ ì¬ë¬ HTML íì¼ìì ì¬ì¬ì©í ì ìë¤ë 측면ìì ì¤í¬ë¦½í¸ë¥¼ ì¸ë¶ íì¼ë¡ ë¶ë¦¬íë ê²ì´ ì¢ìµëë¤. ëí HTMLì ì¤í¬ë¦½í¸ ë©ì´ë¦¬ë¥¼ ë£ì§ ìì기ì HTMLì ë ì½ê² ì½ì ì ììµëë¤.
ì°¸ê³ : ìì±ë ìì ì½ë를 GitHubì apply-javascript-external.htmlê³¼ script.jsìì ë³¼ ì ììµëë¤. (ì¤ì ë¡ ëìíë 모ìµë íì¸í´ë³´ì¸ì)
ì¸ë¼ì¸ JavaScript ì²ë¦¬ê¸°ê°ë HTML ìì ì¤ì JavaScript ì½ëê° ìë ê²½ì°ê° ììµëë¤. ìë ì½ëì²ë¼ì.
function createParagraph() {
const para = document.createElement("p");
para.textContent = "You clicked the button!";
document.body.appendChild(para);
}
<button onclick="createParagraph()">Click me!</button>
ìëìì ì´ ë²ì ì ë°ëª¨ë¥¼ ì¬ì©í´ ë³¼ ì ììµëë¤.
ì´ ë°ëª¨ë ìì ë ì¹ì
ê³¼ ìì í ê°ì 기ë¥ì ê°ì§ê³ ìì§ë§ <button>
ììê° ë²í¼ í´ë¦ ëìì onclick
ì¸ë¼ì¸ ì²ë¦¬ê¸°ë¡ í¬í¨íë¤ë ì ë§ ë¤ë¦
ëë¤.
íì§ë§, ì´ ë°©ë²ì ì¬ì©íì§ ë§ì주ì¸ì. JavaScriptë¡ HTML ì½ë를 물ë¤ì´ë ê²ì ëì ë°©ë²ì¼ ë¿ëë¬ ë¹í¨ì¨ì ì
ëë¤. JavaScript를 ì ì©íë ¤ë 모ë ë²í¼ë§ë¤ ì¼ì¼í onclick="createParagraph()"
를 ì¶ê°í´ì¼ íëê¹ì.
HTMLì JavaScript를 ì§ì ë£ë ëì , ììí JavaScript 구문ì ì¬ì©íì¸ì. querySelectorAll()
í¨ì를 ì¬ì©íë©´ íì¬ íì´ì§ ë´ì 모ë ë²í¼ì ì íí ì ììµëë¤. ê·¸ë° ë¤ì addEventListener()
를 ì¬ì©íì¬ ê°ê°ì í¸ë¤ë¬ë¥¼ í ë¹íì¬ ë²í¼ì ë°ë³µí ì ììµëë¤. ì´ë¥¼ ìí ì½ëë ìëì ê°ìµëë¤.
const buttons = document.querySelectorAll("button");
for (const button of buttons) {
button.addEventListener("click", createParagraph);
}
ì´ ìì±ì onclick
ìì±ë³´ë¤ ì½ê° 길 ì ìì§ë§ íì´ì§ì ìë ë²í¼ì ìë ì¶ê° ëë ì ê±°ë ë²í¼ì ìì ê´ê³ìì´ ëª¨ë ë²í¼ì ëí´ ìëí©ëë¤. JavaScriptë ë³ê²½í íìê° ììµëë¤.
ì¤í¬ë¦½í¸ ë¡ë© ì ëµì°¸ê³ :
apply-javascript.html
ë²ì ì í¸ì§íê³ íì¼ì ë²í¼ì ëª ê° ë ì¶ê°í´ ë³´ì¸ì. ë¸ë¼ì°ì 를 ìë¡ê³ 침í´ë³´ë©´, ì무 ë²í¼ì ë르ëë¼ë ìë¡ì´ 문ë¨ì´ ìì±ëë 모ìµì ë³¼ ì ììµëë¤. ë©ì§ì§ ìëì?
ì¤í¬ë¦½í¸ë¥¼ ì ì í ìì ì ë¶ë¬ì¤ë ì¼ìë ëª ê°ì§ 문ì ê° ììµëë¤. ëë ì§ ë³´ì´ë ê²ë§í¼ ê°ë¨íì§ë ìì ë²ì´ì£ . íí ë§ì£¼ì¹ê² ëë 문ì ë, íì´ì§ì 모ë HTMLì´ íìëë ììëë¡ ë¡ëëë¤ë ê²ì ëë¤. JavaScript를 ì¬ì©í´ì íì´ì§ ë´ì ìì(ë ì ííê²ë Document Object Model)를 ì¡°ìíë ¤ê³ í ë, í´ë¹ ìì를 í¬í¨í HTML ì½ëë³´ë¤ JavaScript를 먼ì ë¶ë¬ìë²ë¦¬ë©´ ì½ëê° ì¬ë°ë¥´ê² ëìíì§ ëª»í ê²ì ëë¤.
ìì ë´ë¶ì ì¸ë¶ JavaScript ìì ììë HTML 본문ì ì½ê¸° ì ì 문ìì í¤ëìì JavaScript를 ë¶ë¬ì ì¤íí©ëë¤. ì´ ê²½ì° ì¤ë¥ê° ë°ìí ì ìì¼ë¯ë¡ ëª ê°ì§ 구문ì ì¬ì©íì¬ ë¬¸ì 를 í´ê²°íìµëë¤.
ë´ë¶ ìì ììë ì½ë 주ìì ì´ë° 구조를 ë³¼ ì ììµëë¤.
document.addEventListener("DOMContentLoaded", () => {
// â¦
});
ì´ê±´ ì´ë²¤í¸, ê·¸ì¤ììë HTML 본문 ì 체를 ë¶ë¬ì ì½ìë¤ë ê²ì ëíë´ë ë¸ë¼ì°ì ì DOMContentLoaded
ì´ë²¤í¸ë¥¼ ìì íë ì´ë²¤í¸ ìì 기ì
ëë¤. ì´ ë¸ë¡ ë´ë¶ì JavaScriptë ì´ë²¤í¸ê° ë°ìí기 ì ìë ì¤íëì§ ìì¼ë¯ë¡ ë¡ë© ìì ì¼ë¡ ì¸í ì¤ë¥ë¥¼ ìë°©í ì ììµëë¤. (ì´í ê³¼ì ìì ì´ë²¤í¸ì ëí´ ë°°ì°ê¸°ë¥¼ 참조íì¸ì.)
ì¸ë¶ ìì ììë <script>
íê·¸ ììì ëë¬íë©´ ë¸ë¼ì°ì ì HTML ì½í
ì¸ ë¥¼ ê³ì ë¤ì´ë¡ëíëë¡ ì§ìíë defer
ìì±ì´ë¼ë ë³´ë¤ ìµì JavaScript 기ë¥ì ì¬ì©íì¬ ë¬¸ì 를 í´ê²°í©ëë¤.
<script src="script.js" defer></script>
ì´ ê²½ì° ì¤í¬ë¦½í¸ì HTMLì´ ëìì ë¡ëëì´ ì½ëê° ìëí©ëë¤.
ì°¸ê³ :
defer
í¹ì±ì´ ì¤ë¥ë¥¼ ìë°©íë¯ë¡, ì¸ë¶ ìì ììëDOMContentLoaded
ì´ë²¤í¸ë¥¼ ì¬ì©íì§ ìììµëë¤.defer
ì ì¸ë¶ ì¤í¬ë¦½í¸ììë§ ìëí기 ë문ì ë´ë¶ JavaScript ìì ììëdefer
ì루ì ì ì¬ì©íì§ ìììµëë¤.
ê³ ì ì ì¸ ë°©ë²ì ì¤í¬ë¦½í¸ ìì를 본문ì 맨 ë§ì§ë§(</body>
íê·¸ ë°ë¡ ì)ì ë°°ì¹íë ê²ì
ëë¤. ê·¸ë¬ë©´ 모ë HTMLì ì½ì íì ì¤í¬ë¦½í¸ë¥¼ ë¶ë¬ì¤ê² ë©ëë¤. ì´ ë°©ë²ì 문ì ë HTML DOMì 모ë ë¶ë¬ì¤ê¸° ì ìë ì¤í¬ë¦½í¸ì ë¡ë©ê³¼ ë¶ìì´ ìì í ì¤ë¨ëë¤ë ì ì
ëë¤. ê·¸ëì ë§ì ì¤í¬ë¦½í¸ë¥¼ í¬í¨íë ëí ì¬ì´í¸ììë ì´ë¡ ì¸í´ ì¬ì´í¸ ìëê° ëë ¤ì§ë ì¤ëí ì±ë¥ 문ì ê° ë°ìí ì ììµëë¤.
ì¤í¬ë¦½í¸ ì¤ë¨ 문ì 를 í´ê²°í ì ìë 기ë¥ìë ì¬ì¤ ë ê°ì§ê° ììµëë¤. async
ì (ììì 본) defer
ì
ëë¤. ì´ë¤ ì°¨ì´ì ì´ ìëì§ ììë´
ìë¤.
async
í¹ì±ì ì§ì íë©´ ì¤í¬ë¦½í¸ë¥¼ ê°ì ¸ì¤ë ëì íì´ì§ ë¡ë©ì ì¤ë¨íì§ ììµëë¤. ê·¸ë¬ë ë¤ì´ë¡ëê° ëëë©´ ì¤í¬ë¦½í¸ê° ë°ë¡ ì¤íëëë°, ì¤í ëì¤ìë íì´ì§ ë ëë§ì´ ì¤ë¨ë©ëë¤. ì¤í¬ë¦½í¸ì ì¤í ìì를 ë³´ì¥í ë°©ë²ì ììµëë¤. ë°ë¼ì async
ë ì¤í¬ë¦½í¸ê° ìë¡ ë
립ì ì¼ë¡ ì¤íëê³ , ë¤ë¥¸ ì¤í¬ë¦½í¸ì ìì¡´íì§ ìë ê²½ì°ì ì¬ì©íë ê²ì´ ê°ì¥ ì¢ìµëë¤.
defer
ìì±ì¼ë¡ ë¡ëë ì¤í¬ë¦½í¸ë íì´ì§ì íìëë ììëë¡ ë¡ëë©ëë¤. ëí íì´ì§ ì½í
ì¸ ë¥¼ 모ë ë¶ë¬ì¤ê¸° ì ê¹ì§ë ì¤ííì§ ìì¼ë¯ë¡, ì¤í¬ë¦½í¸ê° DOMì ìì¹ì ìì¡´íë ê²½ì°(ì: íì´ì§ìì íë ì´ìì ìì를 ìì íë ê²½ì°) ì ì©í©ëë¤.
ë¤ìì ë¤ìí ì¤í¬ë¦½í¸ ë¡ë ë°©ë²ê³¼ í´ë¹ ë°©ë²ì´ íì´ì§ì 미ì¹ë ìí¥ì ìê°ì ì¼ë¡ ííí ê²ì ëë¤.
ì´ ì´ë¯¸ì§ë HTML ëª ì¸ìì ê°ì ¸ì CC BY 4.0 ë¼ì´ì ì¤ íì ì¶ìí ì´ë¯¸ì§ì ëë¤.
ì를 ë¤ì´, ìëì ê°ì´ ì¸ ê°ì ì¤í¬ë¦½í¸ ìì를 ê°ì§ê³ ìë¤ê³ ê°ì í´ ë³´ê² ìµëë¤.
<script async src="js/vendor/jquery.js"></script>
<script async src="js/script2.js"></script>
<script async src="js/script3.js"></script>
ì ì½ëë¡ë ì¤í¬ë¦½í¸ê° HTMLì ììëë¡ ë¶ë¬ìì§ ê²ì´ë¼ê³ íì¤íê² ì측í ì ììµëë¤. jquery.js
ê° script2.js
ë° script3.js
ì ìì´ë ë¤ì ë¡ëë ì ìì¼ë©°, ì´ ê²½ì° ì¤í¬ë¦½í¸ê° ì¤íë ë jquery
ê° ì ìëì§ ì기 ë문ì jquery
ì ë°ë¼ í´ë¹ ì¤í¬ë¦½í¸ì 모ë í¨ìê° ì¤ë¥ë¥¼ ë°ììí¬ ì ììµëë¤.
async
ë ë¡ëí 백그ë¼ì´ë ì¤í¬ë¦½í¸ê° ë§ê³ ê°ë¥í í 빨리 ì ì리ì ë°°ì¹íê³ ì¶ì ë ì¬ì©í´ì¼ í©ëë¤. ì를 ë¤ì´ ì¤ì ë¡ ê²ìì´ ììë ë íìí ê²ì ë°ì´í° íì¼ì ë¡ëí´ì¼ íì§ë§ ì§ê¸ì ì¤í¬ë¦½í¸ ë¡ë©ì¼ë¡ ì¸í´ ì°¨ë¨ëì§ ìê³ ê²ì ì¸í¸ë¡, ì 목, ë¡ë¹ë§ íìíê³ ì¶ë¤ê³ ê°ì í´ ë³´ê² ìµëë¤.
defer
ìì±(ìë 참조)ì ì¬ì©íì¬ ë¡ëë ì¤í¬ë¦½í¸ë íì´ì§ì íìëë ììëë¡ ì¤íëë©° ì¤í¬ë¦½í¸ì ì½í
ì¸ ê° ë¤ì´ë¡ëëë ì¦ì ì¤íë©ëë¤:
<script defer src="js/vendor/jquery.js"></script>
<script defer src="js/script2.js"></script>
<script defer src="js/script3.js"></script>
ë ë²ì§¸ ìì ììë jquery.js
ê° script2.js
ë° script3.js
ë³´ë¤ ë¨¼ì ë¡ëëê³ , script2.js
ê° script3.js
ë³´ë¤ ë¨¼ì ë¡ëëë ê²ì íì¸í ì ììµëë¤. íì´ì§ ì½í
ì¸ ê° ëª¨ë ë¡ëë ëê¹ì§ ì¤íëì§ ìì¼ë¯ë¡ ì¤í¬ë¦½í¸ê° DOMì ìì¹ì ìì¡´íë ê²½ì°(ì: íì´ì§ìì íë ì´ìì ìì를 ìì íë ê²½ì°) ì ì©í©ëë¤.
ìì½íìë©´,
async
ì defer
모ë ë¸ë¼ì°ì ê° íì´ì§ì ë¤ë¥¸ ë´ì©(DOM ë±ë±)ì ë¶ë¬ì¤ë ëì ì¤í¬ë¦½í¸ë¥¼ ë³ë ì¤ë ëìì ë¶ë¬ì¤ê² ë§ëëë¤. ëë¶ì ì¤í¬ë¦½í¸ë¥¼ ê°ì ¸ì¤ë ëì íì´ì§ ë¡ë©ì´ ì¤ë¨ëì§ ììµëë¤.async
ìì±ì ì§ì í ì¤í¬ë¦½í¸ë ë¤ì´ë¡ëê° ëëë ì¦ì ì¤íí©ëë¤. ì´ë ê² íë©´ íì¬ íì´ì§ì ë ëë§ì ì¤ë¨íë©°, í¹ì ì¤í ììê° ë³´ì¥ëì§ ììµëë¤.defer
ìì±ì ì§ì í ì¤í¬ë¦½í¸ë ìì를 ì ì§í ì±ë¡ ê°ì ¸ì¤ë©° 모ë ì½í
ì¸ ë¥¼ ë¤ ë¶ë¬ì¨ ì´íì ì¤íí©ëë¤.async
를 ì¬ì©íì¸ì.defer
를 ì¬ì©íì¬ ì¤í¬ë¦½í¸ë¥¼ ë¡ëíê³ , ìíë ììì ë§ì¶°ì <script>
ìì를 ë°°ì¹íì¸ì.HTML ë° CSSì ë§ì°¬ê°ì§ë¡ JavaScript ì½ëììë ë¸ë¼ì°ì ê° ë¬´ìíë 주ìì ìì±í ì ìì¼ë©°, ì½ë ìë ë°©ìì ëí ì§ì¹¨ì ëë£ ê°ë°ì(ìëë©´ 6ê°ì íì ì½ë를 ë¤ì ì´í´ë³´ê³ 무ìì íëì§ ê¸°ìµì´ ëì§ ìë ì¬ë¬ë¶)ìê² ì ê³µí기 ìí´ ì¡´ì¬í©ëë¤. 주ìì ë§¤ì° ì ì©íë©°, í¹í ê·ëª¨ê° í° ì í리ì¼ì´ì ì ê²½ì° ì주 ì¬ì©í´ì¼ í©ëë¤. 주ììë ë ì¢ ë¥ê° ììµëë¤.
í ì¤ ì§ë¦¬ 주ìì 맨 ìì ì´ì¤ ë¹ê¸(//)ì¼ë¡ ìì±í©ëë¤.
ì¬ë¬ ì¤ ì£¼ìì /*ê³¼ */ì ì¬ì´ì ìì±í©ëë¤.
ê·¸ëì, ë§ì§ë§ì¼ë¡ ë´¤ë JavaScript ìì ì½ëì 주ìì ì¶ê°íë¤ë©´ ì´ë° 모ìµì´ ëê² ì£ .
// í¨ì: ìë¡ì´ 문ë¨ì ìì±í´ì HTML 본문 ëì ë¶ì
ëë¤.
function createParagraph() {
const para = document.createElement("p");
para.textContent = "You clicked the button!";
document.body.appendChild(para);
}
/*
1. íì´ì§ ë´ì 모ë ë²í¼ì ëí 참조를 ë°°ì´ ííë¡ ê°ì ¸ìµëë¤.
2. ë²í¼ ê°ê°ì ìííë©´ì í´ë¦ ì´ë²¤í¸ ìì 기를 ì¶ê°í©ëë¤.
ì무 ë²í¼ì´ë í´ë¦íë©´ createParagraph() í¨ìê° ì¤íë©ëë¤.
*/
const buttons = document.querySelectorAll("button");
for (const button of buttons) {
button.addEventListener("click", createParagraph);
}
ì°¸ê³ : ë³´íµì ë§ì 주ìì´ ì ì 주ìë³´ë¤ ë«ì§ë§, ë³ìê° ë¬´ìì¸ì§ ì¤ëª í기 ìí´(ë³ì ì´ë¦ì´ ë ì§ê´ì ì´ì´ì¼ í¨) ëë ë§¤ì° ê°ë¨í ì°ì°ì ì¤ëª í기 ìí´(ì½ëê° ì§ëì¹ê² ë³µì¡í ì ìì) ë§ì 주ìì ì¶ê°íë ê²½ì° ì£¼ìí´ì¼ í©ëë¤.
ìì½ì´ë¡ì¨ JavaScriptì ì¸ê³ë¡ í 걸ì ë´ëììµëë¤. ì JavaScript를 ì¨ì¼ íëì§, ê·¸ë¦¬ê³ ì´ë¤ ì¼ì í ì ìëì§ì ëí´ ìµìí´ì§ê¸° ìí´ ì´ë¡ ë¶í° ììíìµëë¤. ê·¸ ê³¼ì ìì ëª ê°ì§ ì½ë ìì 를 ë³´ê³ JavaScriptê° ì¹ì¬ì´í¸ì ëë¨¸ì§ ì½ëì ì´ë»ê² ì¡°í를 ì´ë£¨ëì§ ë±ì ë°°ì ìµëë¤.
ì§ê¸ ë¹ì¥ì JavaScriptê° ì½ê° ë²ê²ê² ëê»´ì§ì§ë ëª¨ë¥´ê² ì§ë§, ë무 ê±±ì íì§ ë§ì¸ì. ì´ ê³¼ì ì ê±¸ì¹ ê°ë¨í ë¨ê³ë¤ì ë°ë¤ ë³´ë©´ ì ì²´ì ì¸ ëª¨ìµì´ ë³´ì¼ê²ëë¤. ë¤ì ê¸ììë ë°ë¡ ì¤ì ì¼ë¡ ë¤ì´ê°ì ì¤ì¤ë¡ JavaScript ìì 를 ë§ë¤ì´ë³´ëë¡ í©ìë¤.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4