ê°ë°ìë ê°ë¥í í ê°ê²°íê³ ì½ê¸° ì½ê² ì½ë를 ìì±í´ì¼ í©ëë¤.
ë³µì¡í 문ì 를 ê°ê²°íê³ ì¬ëì´ ì½ê¸° ì¬ì´ ì½ëë¡ ìì±í´ í´ê²°íë ê²ì´ì¼ë§ë¡ ì§ì í íë¡ê·¸ëë° ê¸°ì ì ëë¤. ì¢ì ì½ë ì¤íì¼ì ì´ë° 기ì ì ì°ë§íë ë° í° ëìì ì¤ëë¤.
문ë²
ëª ê°ì§ ì¶ì²í ë§í ê·ì¹ì ìë ì¹í¸ ìí¸ì íìí´ë³´ììµëë¤(ìì¸í ì¤ëª ì ìë를 ì°¸ê³ ).
ì´ì , ê° ê·ì¹ê³¼ ê·ì¹ì´ ì긴 ì´ì ì ëí´ ìì¸í ììë´ ìë¤.
본 íí 리ì¼ìì ì ìíê³ ìë ê·ì¹ 모ë를 ì¢ êµ ì ì¡°ë§ë¥ 무조건 ë°ë¥´ì§ ììë ë©ëë¤. ì¤íì¼ì ëí ì í¸ì ë°ë¼ ê·ì¹ì ë°ë¥¼ ìë, ë°ë¥´ì§ ìì ìë ììµëë¤.
ì¤ê´í¸
ëë¶ë¶ì ìë°ì¤í¬ë¦½í¸ íë¡ì í¸ìì ì¬ë ì¤ê´í¸ë âì´ì§ì (Egyptian)â ì¤íì¼ì ë°ë¼ ìë¡ì´ ì¤ì´ ìë ììíë í¤ìëì ê°ì ì¤ì ìì±í©ëë¤. ì¬ê¸°ì ëíì¬ ì¬ë ì¤ê´í¸ ìì ê³µë°±ì´ íë ìì´ì¼ í©ëë¤. ìëì ê°ì´ ë§ì´ì£ .
if (condition) {
// ì½ë 1
// ì½ë 2
// ...ì½ë n...
}
if (condition) doSomething()ê³¼ ê°ì ë¨ í ì¤ì§ë¦¬ 구문ì ì¤ìíê² ë¤ë¤ì¼ í ìì§ ì¼ì´ì¤ì
ëë¤. ì´ë° ìì¸ìí©ìë ì¤ê´í¸ë¥¼ ì¨ì¼ í ê¹ì?
ì´ë»ê² ì½ë를 ìì±í´ì¼ ê°ë ì±ì´ ì¢ìì§ ì§ì íë¨í´ ë³´ìë¼ê³ 주ìê³¼ í¨ê» ëª ê°ì§ ìì를 ë§ë¤ì´ë³´ììµëë¤.
- ð ì´ë³´ ê°ë°ìë¤ì ìëì²ë¼ ì½ë를 ìì±í곤 íëë°, ì¤ê´í¸ê° íìíì§ ì기 ë문ì ì¶ì²íì§ ììµëë¤.
if (n < 0) {alert(`Power ${n} is not supported`);} - ð ì¤ê´í¸ ìì´ ìë¡ì´ ì¤ì ì½ë를 ìì±í ìë ìëë°, ì´ë ê² íë©´ ìë¡ì´ ì½ë ë¼ì¸ì ì¶ê°í ë ìë¬ê° ë°ìí©ëë¤. ì ë ì´ ë°©ë²ì ì°ì§ ë§ì¸ì.
if (n < 0) alert(`Power ${n} is not supported`); - ð ì½ëê° ì§§ë¤ë©´ ì¤ê´í¸ ìì´ í ì¤ì ì°ë ë°©ë²ë ê´ì°®ìµëë¤.
if (n < 0) alert(`Power ${n} is not supported`); - ð ê°ì¥ ì¶ì²íë ë°©ë²ì ë¤ìê³¼ ê°ìµëë¤.
if (n < 0) { alert(`Power ${n} is not supported`); }
if (cond) return nullì²ë¼ ì½ëê° ê°ë¨íë¤ë©´ ì¸ ë²ì§¸ ììê°ì´ í ì¤ì 몰ìì ìì±í´ë ê´ì°®ìµëë¤. ê·¸ë ì§ë§ ë¤ ë²ì§¸ ììì²ë¼ ì½ë ë¸ë¡ì ì¬ì©íë ë°©ë²ì´ ê°ì¥ ê°ë
ì±ì´ ì¢ì¼ë¯ë¡ ì´ ë°©ë²ì ì¶ì²í©ëë¤.
ê°ë¡ 길ì´
ê°ë¡ë¡ ê¸¸ê² ëì´ì§ ì½ë를 ì½ë 걸 ì¢ìíë ê°ë°ìë ììµëë¤. ì½ëì ê°ë¡ 길ì´ê° 길ì´ì§ë¤ë©´ ì¬ë¬ ì¤ë¡ ëë ìì±íë ê² ì¢ìµëë¤.
ìì:
// ë°±í±(`)ì ì¬ì©íë©´ 문ìì´ì ì¬ë¬ ì¤ë¡ ì½ê² ëë ì ììµëë¤.
let str = `
ECMA International's TC39 is a group of JavaScript developers,
implementers, academics, and more, collaborating with the community
to maintain and evolve the definition of JavaScript.
`;
if문ì´ë¼ë©´ ìëì ê°ì´ ìì±í ì ììê²ëë¤.
if (
id === 123 &&
moonPhase === 'Waning Gibbous' &&
zodiacSign === 'Libra'
) {
letTheSorceryBegin();
}
ìµë ê°ë¡ 길ì´ë íìë¤ê³¼ í©ìí´ ì íëê² ì¢ìµëë¤. ëê° 80ìë 120ìë¡ ì ííë ê² ì¼ë°ì ì ëë¤.
ë¤ì¬ì°ê¸°
ë¤ì¬ì°ê¸°ìë ë ì¢ ë¥ê° ììµëë¤.
-
ê°ë¡ ë¤ì¬ì°ê¸°: ì¤íì´ì¤ ë ê° í¹ì ë¤ ê°ë¥¼ ì¬ì©í´ ë§ë¦
ê°ë¡ ë¤ì¬ì°ê¸°ë ì¤íì´ì¤ ë ê° í¹ì ë¤ ê°ë¥¼ ì¬ì©íê±°ë í í¤(Tab)를 ì´ì©í´ ë§ë¤ ì ììµëë¤. ì´ë¤ ë°©ë²ì ì¸ì§ì ëí ë ¼ìì ì¤ëì ë¶í° ììëë°, ìì¦ì í ëì ì¤íì´ì¤ë¥¼ ì´ì©íë ê² ë ì°ìì ìë ê² ê°ìµëë¤.
í ëì ì¤íì´ì¤ë¥¼ ì´ì©íì ëì ì¥ì ì¤ íëë ë¤ì¬ì°ê¸° ì ë를 ì¢ ë ì ì°íê² ë³ê²½í ì ìë¤ë ì ì ëë¤.
ìë ììì²ë¼ ì¸ì 모ëì ìì¹ë¥¼ ì¬ë ê´í¸ì ë§ì¶ ì ìì£ .
show(parameters, aligned, // ì¤íì´ì¤ ë¤ì¯ ê°ë¥¼ ì´ì©í´ ë¤ì¬ì°ê¸° í¨ one, after, another ) { // ... } -
ì¸ë¡ ë¤ì¬ì°ê¸°: ë ¼ë¦¬ ë¸ë¡ ì¬ì´ì ë£ì´ ì½ë를 ë¶ë¦¬í´ì£¼ë ì ì¤
í¨ì íëì ë ¼ë¦¬ ë¸ë¡ ì¬ë¬ ê°ê° ë¤ì´ê° ì ììµëë¤. ìë ìììì ë³ì ì ì¸, ë°ë³µë¬¸, 리í´ë¬¸ ì¬ì´ì ì¸ë¡ ë¤ì¬ì°ê¸°ë¥¼ í´ì£¼ë ë¹ ì¤ì ë£ì´ ì½ë를 ë¶ë¦¬í´ ë³´ììµëë¤.
function pow(x, n) { let result = 1; // <-- for (let i = 0; i < n; i++) { result *= x; } // <-- return result; }ì´ë ê² ì¬ë¶ì ì¤ì ë£ì´ì£¼ë©´ ì½ëì ê°ë ì±ì´ ì¢ìì§ëë¤. ì½ê¸° ì¬ì´ ì½ë를 ë§ë¤ë ¤ë©´ ì¸ë¡ ë¤ì¬ì°ê¸° ìì´ ì½ë를 ìí ì¤ ì´ì ì°ìí´ì ì°ì§ ë§ì¸ì.
ì¸ë¯¸ì½ë¡
ìë°ì¤í¬ë¦½í¸ ìì§ì ìí´ ë¬´ìëëë¼ë 모ë 구문ì ëì ì¸ë¯¸ì½ë¡ ì ì¨ì£¼ë ê²ì´ ì¢ìµëë¤.
구문 ëì ì¸ë¯¸ì½ë¡ ì ì ë ê² ìì í ì íì¬íì¸ ì¸ì´ê° ëªëª ìëë° ì´ë° ì¸ì´ë¤ìì ì¸ë¯¸ì½ë¡ ì ì ì°ì§ ììµëë¤. ê·¸ë¬ë ìë°ì¤í¬ë¦½í¸ìì ì¤ ë°ê¿ì´ ì¸ë¯¸ì½ë¡ ì¼ë¡ í´ìëì§ ìë ëªëª ìí©ì´ ì기 ë문ì ì¸ë¯¸ì½ë¡ ì ìëµíê³ ì½ë©íë ìµê´ì ë¤ì´ë©´ ìë¬ë¥¼ ë°ììí¤ë ì½ë를 ë§ë¤ ì ììµëë¤. ìì¸í ì¬ë¡ë ì½ë 구조 ì±í°ìì ì´í´ë³´ì¸ì.
ê²½íì´ ë§ì ìë°ì¤í¬ë¦½í¸ ê°ë°ìë¼ë©´ StandardJSìì ì ìíë ì¤íì¼ ê°ì´ëì²ë¼ ì¸ë¯¸ì½ë¡ ìì´ ì½ë를 ìì±í ìë ììµëë¤. ì´ë³´ ê°ë°ìë¼ë©´ ìë¬ë¥¼ ë§ë¤ íë¥ ì ì¤ì´ê¸° ìí´ìë¼ë ì¸ë¯¸ì½ë¡ ì ì¬ì©íë ê² ì¢ìµëë¤.
ì¤ì²© ë 벨
ê°ë¥íë©´ ë무 ê¹ì ì¤ì²©ë¬¸ì ì¬ì©íì§ ìëë¡ í©ìë¤.
ë°ë³µë¬¸ì ì¬ì©í ë ì¤ì²©ë¬¸ì ê¹ì´ê° ê¹ì´ì§ë©´ continue ì§ìì를 ì°ë ê² ì¢ì ëìì´ ë ìë ììµëë¤.
if문ì¼ë¡ ì¡°ê±´ì ì²ë¦¬íë ìì를 íµí´ ì´ë¥¼ ì´í´ë´
ìë¤.
for (let i = 0; i < 10; i++) {
if (cond) {
... // <- ì¤ì²© ë ë²¨ì´ íë ë ëì´ë¬ìµëë¤.
}
}
ì ì½ëë continue를 ì¨ì ìëì ê°ì´ ë°ê¿ ì ììµëë¤.
for (let i = 0; i < 10; i++) {
if (!cond) continue;
... // <- ì¶ê° ì¤ì²© ë ë²¨ì´ ì¶ê°ëì§ ììµëë¤.
}
if/elseì return문ì ì¡°í©íë©´ ì ììì ì ì¬íê² ì¤ì²© ë 벨ì ì¤ì¬ ì½ëì ê°ë
ì±ì ëì¼ ì ììµëë¤.
ìë ë ììë ëì¼íê² ëìí©ëë¤.
ìì 1:
function pow(x, n) {
if (n < 0) {
alert("'n'ì ììê° ë ì ììµëë¤.");
} else {
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
}
ìì 2:
function pow(x, n) {
if (n < 0) {
alert("'n'ì ììê° ë ì ììµëë¤.");
return;
}
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
n < 0ì¸ 'í¹ë³í ìí©âì ìì ëê³ , ê·¸ ìì return문ì ì¶ê°í´ì£¼ìëë ê°ë
ì±ì´ í¨ì¬ ì¢ìì¡ìµëë¤. í¹ë³í ìí©ì¸ì§ë¥¼ íì¸íê³ ì¡°ê±´ì íµê³¼íë©´ ì¶ê° ì¤ì²© ìì´ â주ìâ ì½ë íë¦ì¼ë¡ ëì´ê°ê² ì½ë를 짰기 ë문ì
ëë¤.
í¨ìì ìì¹
âí¬í¼â í¨ì ì¬ë¬ ê°ë¥¼ ë§ë¤ì´ ì¬ì©íê³ ìë¤ë©´ ìëì ê°ì ë°©ë²ì ì¬ì©í´ ì½ë 구조를 ì ëí ì ììµëë¤.
-
í¬í¼ í¨ì를 ì¬ì©íë ì½ë ììì í¬í¼ í¨ì를 모ì ì ì¸í기
// í¨ì ì ì¸ function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } // í¬í¼ í¨ì를 ì¬ì©íë ì½ë let elem = createElement(); setHandler(elem); walkAround(); -
ì½ë를 먼ì , í¨ìë ê·¸ ë¤ìì ì ì¸í기
// í¬í¼ í¨ì를 ì¬ì©íë ì½ë let elem = createElement(); setHandler(elem); walkAround(); // --- í¬í¼ í¨ì --- function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } -
í¼í©: ì½ë ë°ë¡ ììì íìí í¬í¼ í¨ì ê·¸ëê·¸ë ì ì¸í기
ëê°ë ë ë²ì§¸ ë°©ë²ì¼ë¡ ì½ë를 ì ëíë 걸 ì í¸í©ëë¤.
ì¬ëë¤ì ì´ ì½ëê° '무ìì íëì§â를 ìê°íë©° ì½ë를 ì½ê¸° ë문ì ì½ëê° ë¨¼ì ëì¤ë ê²ì´ ìì°ì¤ë½ê¸° ë문ì ëë¤. ì´ë¦ë§ ë³´ê³ ë í¬í¼ í¨ìì ìí ì ì½ê² ì ì¶í ì ìê² í¬í¼ í¨ì ì´ë¦ì ëª ëª íë¤ë©´ í¨ì 본문ì ì½ì íìë ììµëë¤.
ì¤íì¼ ê°ì´ë
ì½ë© ì¤íì¼ ê°ì´ëë ì½ë를 'ì´ë»ê² ìì±í ì§âì ëí ì ë°ì ì¸ ê·ì¹ì ë´ì 문ìë¡, ì´ë¤ ë°ì´í를 ì¸ì§, ë¤ì¬ì°ê¸°í ë ì¤íì´ì¤ë¥¼ ëª ê° ì¬ì©í ì§, ìµë ê°ë¡ 길ì´ë ëªê¹ì§ ì íí ì§ ë±ì ë´ì©ì´ ë´ê²¨ììµëë¤.
íì ì ì²´ê° ëì¼í ì¤íì¼ ê°ì´ë를 ë°ë¼ ì½ë를 ìì±íë©´, ëê° ì½ë를 ìì±íëì ê´ê³ìì´ ëì¼í ì¤íì¼ì ì½ë를 ë§ë¤ ì ììµëë¤.
íìë¤ì´ ëª¨ì¬ í ì ì© ì¤íì¼ ê°ì´ë를 ë§ë¤ ìë ìëë°, ìì¦ì ì´ë¯¸ ìì±ë ê°ì´ë ì¤ íë를 ì íí´ íì ê°ì´ëë¡ ì¼ë í¸ì ëë¤.
ì ëª ì¤íì¼ ê°ì´ë:
- Googleì ìë°ì¤í¬ë¦½í¸ ì¤íì¼ ê°ì´ë
- Airbnbì ìë°ì¤í¬ë¦½í¸ ì¤íì¼ ê°ì´ë
- Idiomatic.JS
- StandardJS
- 기í ë±ë±
ì´ë³´ ê°ë°ìë¼ë©´ ìë¨ ì¹í¸ ìí¸ë¥¼ ììì¼ë¡ 본ì¸ë§ì ì¤íì¼ì ê°ì´ë를 ë§ë¤ì´ ë³´ì기 ë°ëëë¤. ì ëª ì¤íì¼ ê°ì´ë ë±ì ì´í´ë³´ë©° ìì´ëì´ë¥¼ ì»ê³ , ë§ìì ëë ê·ì¹ì 본ì¸ì ì¤íì¼ ê°ì´ëì ë°ìí´ ë³´ì기 ë°ëëë¤.
Linter
Linterë¼ë ë구를 ì¬ì©íë©´ ë´ê° ìì±í ì½ëê° ì¤íì¼ ê°ì´ë를 ì¤ìíê³ ìëì§ë¥¼ ìëì¼ë¡ íì¸í ì ìê³ , ì¤íì¼ ê°ì ê³¼ ê´ë ¨ë ì ìë ë°ì ì ììµëë¤.
ì´ë ê² ìëì¼ë¡ ì¤íì¼ì ì²´í¬ë°ë¤ ë³´ë©´, ë³ìë í¨ì ì´ë¦ì ë ì¤í ë±ì´ ì ë°íë ë²ê·¸ë¥¼ 미리 ë°ê²¬í ì ìì´ì ì¢ìµëë¤. ìì§ 'ì½ë ì¤íì¼âì ì íì§ ììëë¼ë linter를 ì¬ì©íë©´ ë²ê·¸ë¥¼ ìë°©í ì ì기 ë문ì linter ì¬ì©ì ê¶ì ë립ëë¤.
ì ëª linter:
- JSLint â ìì¬ê° ì¤ëë linter
- JSHint â JSLintë³´ë¤ ì¸í ì´ ì¢ ë ì ì°í linter
- ESLint â ê°ì¥ ìµê·¼ì ëì¨ linter
ì linter 모ë íë¥í 기ë¥ì ì ê³µí©ëë¤. ê¸ì´ì´ë ESLint를 ì¬ì©íê³ ììµëë¤.
ëë¶ë¶ì linterë íë¬ê·¸ì¸ ííë¡ ì ëª ìëí°ì íµí©í´ ì¬ì©í ì ììµëë¤. ìíë ì¤íì¼ì ì¤ì íë ê² ìì ê°ë¥í©ëë¤.
ESLint를 ì¬ì©íë¤ê³ ê°ì íì ë ìë ì 차를 ë°ë¥´ë©´ ìëí°ì linter를 íµí©í´ ì¬ì©í ì ììµëë¤.
- Node.js를 ì¤ì¹í©ëë¤.
- npm(ìë°ì¤í¬ë¦½í¸ í¨í¤ì§ 매ëì )ì ì¬ì©í´ ë¤ì ëª
ë ¹ì´ë¡ ESLint를 ì¤ì¹í©ëë¤.
npm install -g eslint - íì¬ ìì± ì¤ì¸ ìë°ì¤í¬ë¦½í¸ íë¡ì í¸ì ë£¨í¸ í´ë(íë¡ì í¸ ê´ë ¨ íì¼ì´ ë´ê¸´ í´ë)ì
.eslintrcë¼ë ì¤ì íì¼ì ìì±í©ëë¤. - ìëí°ì ESLint íë¬ê·¸ì¸ì ì¤ì¹íê±°ë íì±íí©ëë¤. 주ì ìëí°ë¤ì 모ë ESLint íë¬ê·¸ì¸ì ì§ìí©ëë¤.
ìëë .eslintrc íì¼ì ììì
ëë¤.
{
"extends": "eslint:recommended",
"env": {
"browser": true,
"node": true,
"es6": true
},
"rules": {
"no-console": 0,
"indent": ["warning", 2]
}
}
ì ìììì ì§ìì "extends"ë "eslint:recommended"를 기ë°ì¼ë¡ ì´ë¥¼ íì¥í´ ì¤íì¼ ê°ì´ë를 ì¤ì íê² ë¤ë 걸 ì미í©ëë¤. ì´ë ê² ì¸í
í ì´íì ìì ë§ì ì¤íì¼ì ì¤ì íë©´ ë©ëë¤.
ì¤íì¼ ê·ì¹ì 모ìëì ì¸í¸ë¥¼ ì¹ìì ë¤ì´ë¡ëí´ ì´ë¥¼ 기ë°ì¼ë¡ ì¤íì¼ ê°ì´ë를 ì¤ì íë ê²ë ê°ë¥í©ëë¤. ì¤ì¹ ë°©ë²ì ëí ìì¸í ë´ì©ì http://eslint.org/docs/user-guide/getting-startedìì íì¸í´ ë³´ì기 ë°ëëë¤.
ëªëª IDEììë ìì²´ lint ëêµ¬ê° ìì´ í¸ë¦¬í긴 íì§ë§ ESLintì²ë¼ ì½ê² ì¤ì ì ë³ê²½íë ê² ë¶ê°ë¥íë¤ë ë¨ì ì´ ììµëë¤.
ìì½
ì´ ì±í°ìì ìê°í´ ë린 ë¬¸ë² ê·ì¹ê³¼ ì¤íì¼ ê°ì´ë ê´ë ¨ ì°¸ê³ ìë£ë¤ì ì½ë ê°ë ì±ì ëì´ê¸° ìí´ ë§ë¤ì´ì¡ìµëë¤.
âë ì¢ìâ ì½ë를 ë§ë¤ë ¤ë©´ "ê°ë ì±ì´ ì¢ê³ ì´í´í기 ì¬ì´ ì½ë를 ë§ë¤ë ¤ë©´ 무ìì í´ì¼ í ê¹?"ë¼ë ì§ë¬¸ê³¼ "ìë¬ë¥¼ í¼íë ¤ë©´ ì´ë¤ ì¼ì í´ì¼ í ê¹?"ë¼ë ì§ë¬¸ì ì¤ì¤ë¡ìê² ëì ¸ì¼ í©ëë¤. ì´ë¤ ì½ë© ì¤íì¼ì ë°ë¥¼ì§ ê²°ì í ëì ì´ì ëí ë ¼ìì í ë ì´ë° ì§ë¬¸ì 기ë°ì¼ë¡ í´ì¼ íì£ .
ì ëª ì¤íì¼ ê°ì´ë를 ì½ë¤ ë³´ë©´ ì½ë ì¤íì¼ì ê´í ê²½í¥ê³¼ ëª¨ë² ì¬ë¡ì ëí ìµì ì 보를 ì ì§í ì ììµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.