ìë°ì¤í¬ë¦½í¸ë í¨ì를 í¹ë³í ì¢ ë¥ì ê°ì¼ë¡ ì·¨ê¸í©ëë¤. ë¤ë¥¸ ì¸ì´ììì²ë¼ "í¹ë³í ëìì íë 구조"ë¡ ì·¨ê¸ëì§ ììµëë¤.
ì´ì ì±í°ìì í¨ì ì ì¸(Function Declaration), í¨ì ì ì¸ë¬¸ ë°©ìì¼ë¡ í¨ì를 ë§ë¤ììµëë¤. ìëì ê°ì´ ë§ì´ì£ .
function sayHi() {
alert( "Hello" );
}
í¨ì ì ì¸ ë°©ì ì¸ì í¨ì ííì(Function Expression) ì ì¬ì©í´ì í¨ì를 ë§ë¤ ì ììµëë¤.
í¨ì ííìì¼ë¡ í¨ì를 ìì±í´ë³´ê² ìµëë¤.
let sayHi = function() {
alert( "Hello" );
};
í¨ì를 ìì±íê³ ë³ìì ê°ì í ë¹íë ê²ì²ë¼ í¨ìê° ë³ìì í ë¹ëììµëë¤. í¨ìê° ì´ë¤ ë°©ìì¼ë¡ ë§ë¤ì´ì¡ëì§ì ê´ê³ìì´ í¨ìë ê°ì´ê³ , ë°ë¼ì ë³ìì í ë¹í ì ììµëë¤. ì ìììì í¨ìê° ë³ì sayHiì ì ì¥ë ê°ì´ ëììµëë¤.
ì ìì를 ê°ë¨í ë§ë¡ íë©´ ë¤ìê³¼ ê°ìµëë¤: âí¨ì를 ë§ë¤ê³ ê·¸ í¨ì를 ë³ì sayHiì í ë¹í기â
í¨ìë ê°ì´ê¸° ë문ì alert를 ì´ì©íì¬ í¨ì ì½ë를 ì¶ë ¥í ìë ììµëë¤.
function sayHi() {
alert( "Hello" );
}
alert( sayHi ); // í¨ì ì½ëê° ë³´ì
ë§ì§ë§ ì¤ìì sayHiìì ê´í¸ê° ì기 ë문ì í¨ìë ì¤íëì§ ììµëë¤. ì´ë¤ ì¸ì´ìì ê´í¸ ìì´ í¨ì ì´ë¦ë§ ì¸ê¸í´ë í¨ìê° ì¤íë©ëë¤. íì§ë§ ìë°ì¤í¬ë¦½í¸ë ê´í¸ê° ìì´ì¼ë§ í¨ìê° í¸ì¶ë©ëë¤.
ìë°ì¤í¬ë¦½í¸ìì í¨ìë ê°ì ëë¤. ë°ë¼ì í¨ì를 ê°ì²ë¼ ì·¨ê¸í ì ììµëë¤. ì ì½ëìì í¨ì ìì¤ ì½ëê° ë¬¸ìíì¼ë¡ ë°ëì´ ì¶ë ¥ëììµëë¤.
í¨ìë sayHi()ì²ë¼ í¸ì¶í ì ìë¤ë ì ë문ì ì¼ë°ì ì¸ ê°ê³¼ë ì¡°ê¸ ë¤ë¦
ëë¤. í¹ë³í ì¢
ë¥ì ê°ì´ì£ .
íì§ë§ ê·¸ 본ì§ì ê°ì´ê¸° ë문ì ê°ì í ì ìë ì¼ì í¨ììë í ì ììµëë¤.
ë³ì를 ë³µì¬í´ ë¤ë¥¸ ë³ìì í ë¹íë ê²ì²ë¼ í¨ì를 ë³µì¬í´ ë¤ë¥¸ ë³ìì í ë¹í ìë ììµëë¤.
function sayHi() { // (1) í¨ì ìì±
alert( "Hello" );
}
let func = sayHi; // (2) í¨ì ë³µì¬
func(); // Hello // (3) ë³µì¬í í¨ì를 ì¤í(ì ìì ì¼ë¡ ì¤íë©ëë¤)!
sayHi(); // Hello // 본ë í¨ìë ì ìì ì¼ë¡ ì¤íë©ëë¤.
ì ìììì ì´ë¤ ì¼ì´ ì¼ì´ë¬ëì§ ìì¸í ììë³´ê² ìµëë¤.
(1)ìì í¨ì ì ì¸ ë°©ìì ì´ì©í´ í¨ì를 ìì±í©ëë¤. ìì±í í¨ìësayHië¼ë ë³ìì ì ì¥ë©ëë¤.(2)ììsayHi를 ìë¡ì´ ë³ìfuncì ë³µì¬í©ëë¤. ì´ësayHië¤ìì ê´í¸ê° ìë¤ë ì ì ì ìíì기 ë°ëëë¤. ê´í¸ê° ììë¤ë©´func = sayHi()ê° ëì´sayHií¨ì ê·¸ ìì²´ê° ìëë¼, í¨ì í¸ì¶ ê²°ê³¼(í¨ìì ë°í ê°) ê°funcì ì ì¥ëìì ê²ëë¤.- ì´ì
sayHi()ìfunc()ë¡ í¨ì를 í¸ì¶í ì ìê² ëììµëë¤.
í¨ì sayHië ìëì ê°ì´ í¨ì ííìì ì¬ì©í´ ì ìí ì ììµëë¤.
let sayHi = function() {
alert( "Hello" );
};
let func = sayHi;
// ...
ëì ê²°ê³¼ë ëì¼í©ëë¤.
í¨ì ííìì ëì ì ì¸ë¯¸ ì½ë¡ ;ì´ ë¶ëì§ ìë¬¸ì´ ë¤ ì ììµëë¤. í¨ì ì ì¸ë¬¸ìë ì¸ë¯¸ ì½ë¡ ì´ ìëë° ë§ì´ì£ .
function sayHi() {
// ...
}
let sayHi = function() {
// ...
};
ì´ì ë ê°ë¨í©ëë¤.
if { ... },for { },function f { }ê°ì´ ì¤ê´í¸ë¡ ë§ë ì½ë ë¸ë¡ ëì;ì´ ìì´ë ë©ëë¤.- í¨ì ííìì
let sayHi = ...;ê³¼ ê°ì 구문 ììì ê°ì ìí ì í©ëë¤. ì½ë ë¸ë¡ì´ ìëê³ ê°ì²ë¼ ì·¨ê¸ëì´ ë³ìì í ë¹ëì£ . 모ë 구문ì ëì ì¸ë¯¸ ì½ë¡;ì ë¶ì´ë ê² ì¢ìµëë¤. í¨ì ííìì ì°ì¸ ì¸ë¯¸ ì½ë¡ ì í¨ì ííì ë문ì ë¶ì¬ì§ ê² ìëë¼, 구문ì ëì´ê¸° ë문ì ë¶ì¬ì¡ìµëë¤.
ì½ë°± í¨ì
í¨ì를 ê°ì²ë¼ ì ë¬íë ìì, í¨ì ííìì ê´í ìì를 ì¢ ë ì´í´ë³´ê² ìµëë¤.
매ê°ë³ìê° 3ê° ìë í¨ì, ask(question, yes, no)를 ìì±í´ë³´ê² ìµëë¤. ê° ë§¤ê°ë³ìì ëí ì¤ëª
ì ìëì ê°ìµëë¤.
question- ì§ë¬¸
yes- "Yes"ë¼ê³ ëµí ê²½ì° ì¤íëë í¨ì
no- "No"ë¼ê³ ëµí ê²½ì° ì¤íëë í¨ì
í¨ìë ë°ëì question(ì§ë¬¸)ì í´ì¼ íê³ , ì¬ì©ìì ëµë³ì ë°ë¼ yes() ë no()를 í¸ì¶í©ëë¤.
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
function showOk() {
alert( "ëìíì
¨ìµëë¤." );
}
function showCancel() {
alert( "ì·¨ì ë²í¼ì ë르ì
¨ìµëë¤." );
}
// ì¬ì©ë²: í¨ì showOkì showCancelê° ask í¨ìì ì¸ìë¡ ì ë¬ë¨
ask("ëìíìëê¹?", showOk, showCancel);
ì´ë ê² í¨ì를 ìì±íë ë°©ë²ì ì¤ë¬´ìì ì주 ì ì©íê² ì°ì ëë¤. ë©´ëë©´ì¼ë¡ ì§ë¬¸íë ê²ë³´ë¤ ìì²ë¼ 컨íì°½ì ëì ì§ë¬¸ì ëì§ê³ ëµë³ì ë°ì¼ë©´ ê°ë¨íê² ì¤ë¬¸ì¡°ì¬ë¥¼ ì§íí ì ììµëë¤. ì¤ì ìì© ìë¹ì¤ìì 컨í ì°½ì ì¢ ë ë©ì§ê² 꾸미ë ë±ì ìì ì´ ëë°ë긴 íì§ë§, ì¼ë¨ ì¬ê¸°ì ê·¸ê² ì¤ìí í¬ì¸í¸ë ìëëë¤.
í¨ì askì ì¸ì, showOkì showCancelì ì½ë°± í¨ì ëë ì½ë°±ì´ë¼ê³ ë¶ë¦½ëë¤.
í¨ì를 í¨ìì ì¸ìë¡ ì ë¬íê³ , íìíë¤ë©´ ì¸ìë¡ ì ë¬í ê·¸ í¨ì를 "ëì¤ì í¸ì¶(called back)"íë ê²ì´ ì½ë°± í¨ìì ê°ë
ì
ëë¤. ì ìììì ì¬ì©ìê° "yes"ë¼ê³ ëëµí ê²½ì° showOkê° ì½ë°±ì´ ëê³ , "no"ë¼ê³ ëëµí ê²½ì° showCancelê° ì½ë°±ì´ ë©ëë¤.
ìëì ê°ì´ í¨ì ííìì ì¬ì©íë©´ ì½ë 길ì´ê° ì§§ìì§ëë¤.
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
ask(
"ëìíìëê¹?",
function() { alert("ëìíì
¨ìµëë¤."); },
function() { alert("ì·¨ì ë²í¼ì ë르ì
¨ìµëë¤."); }
);
ask(...) ìì í¨ìê° ì ì¸ë ê² ë³´ì´ìëì? ì´ë ê² ì´ë¦ ìì´ ì ì¸í í¨ìë ìµëª
í¨ì(anonymous function) ë¼ê³ ë¶ë¦
ëë¤. ìµëª
í¨ìë (ë³ìì í ë¹ë ê² ìë기 ë문ì) ask ë°ê¹¥ìì ì ê·¼í ì ììµëë¤. ì ììë ìë를 ê°ì§ê³ ì´ë ê² êµ¬ííì기 ë문ì ë°ê¹¥ìì ì ê·¼í ì ìì´ë 문ì ê° ììµëë¤.
ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©íë¤ ë³´ë©´ ì½ë°±ì íì©í ì½ë를 ì주 ìì°ì¤ë ë§ëê² ë©ëë¤. ì´ë° ì½ëë ìë°ì¤í¬ë¦½í¸ì ì ì ì ëë³í©ëë¤.
문ìì´ì´ë ì«ì ë±ì ì¼ë°ì ì¸ ê°ë¤ì ë°ì´í°ë¥¼ ëíë ëë¤.
í¨ìë íëì *ëì(action)*ì ëíë ëë¤.
ëìì ëë³íë ê°ì¸ í¨ì를 ë³ì ê° ì ë¬íê³ , ëìì´ íìí ë ì´ ê°ì ì¤íí ì ììµëë¤.
í¨ì ííì vs í¨ì ì ì¸ë¬¸
í¨ì ííìê³¼ ì ì¸ë¬¸ì ì°¨ì´ì ëí´ ììë´ ìë¤.
첫 ë²ì§¸ë 문ë²ì ëë¤. ì½ë를 íµí´ ì´ë¤ ì°¨ì´ê° ìëì§ ì´í´ë´ ìë¤.
-
í¨ì ì ì¸ë¬¸: í¨ìë 주ì ì½ë íë¦ ì¤ê°ì ë ìì ì¸ êµ¬ë¬¸ ííë¡ ì¡´ì¬í©ëë¤.
// í¨ì ì ì¸ë¬¸ function sum(a, b) { return a + b; } -
í¨ì ííì: í¨ìë ííìì´ë 구문 구ì±(syntax construct) ë´ë¶ì ìì±ë©ëë¤. ìë ìììì í¨ìê° í ë¹ ì°ì°ì
=를 ì´ì©í´ ë§ë âí ë¹ ííìâ ì°ì¸¡ì ìì±ëììµëë¤.// í¨ì ííì let sum = function(a, b) { return a + b; };
ë ë²ì§¸ ì°¨ì´ë ìë°ì¤í¬ë¦½í¸ ìì§ì´ ì¸ì í¨ì를 ìì±íëì§ì ììµëë¤.
í¨ì ííìì ì¤ì ì¤í íë¦ì´ í´ë¹ í¨ìì ëë¬íì ë í¨ì를 ìì±í©ëë¤. ë°ë¼ì ì¤í íë¦ì´ í¨ìì ëë¬íì ëë¶í° í´ë¹ í¨ì를 ì¬ì©í ì ììµëë¤.
ì ìì를 ì´ì©í´ ì¤ëª
í´ ë³´ëë¡ íê² ìµëë¤. ì¤í¬ë¦½í¸ê° ì¤íëê³ , ì¤í íë¦ì´ let sum = functionâ¦ì ì°ì¸¡(í¨ì ííì)ì ëë¬ íìë í¨ìê° ìì±ë©ëë¤. ì´ë ì´íë¶í° í´ë¹ í¨ì를 ì¬ì©(í ë¹, í¸ì¶ ë±)í ì ììµëë¤.
íì§ë§ í¨ì ì ì¸ë¬¸ì ì¡°ê¸ ë¤ë¦ ëë¤.
í¨ì ì ì¸ë¬¸ì í¨ì ì ì¸ë¬¸ì´ ì ìë기 ì ìë í¸ì¶í ì ììµëë¤.
ë°ë¼ì ì ì í¨ì ì ì¸ë¬¸ì ì¤í¬ë¦½í¸ ì´ëì ìëëì ìê´ìì´ ì´ëììë ì¬ì©í ì ììµëë¤.
ì´ê² ê°ë¥í ì´ì ë ìë°ì¤í¬ë¦½í¸ì ë´ë¶ ìê³ ë¦¬ì¦ ë문ì ëë¤. ìë°ì¤í¬ë¦½í¸ë ì¤í¬ë¦½í¸ë¥¼ ì¤íí기 ì , ì¤ë¹ë¨ê³ìì ì ìì ì ì¸ë í¨ì ì ì¸ë¬¸ì ì°¾ê³ , í´ë¹ í¨ì를 ìì±í©ëë¤. ì¤í¬ë¦½í¸ê° ì§ì§ ì¤íë기 ì "ì´ê¸°í ë¨ê³"ìì í¨ì ì ì¸ ë°©ìì¼ë¡ ì ìí í¨ìê° ìì±ëë ê²ì´ì£ .
ì¤í¬ë¦½í¸ë í¨ì ì ì¸ë¬¸ì´ 모ë ì²ë¦¬ë ì´íììì¼ ì¤íë©ëë¤. ë°ë¼ì ì¤í¬ë¦½í¸ ì´ëìë í¨ì ì ì¸ë¬¸ì¼ë¡ ì ì¸í í¨ìì ì ê·¼í ì ìë ê²ì ëë¤.
ìì를 ì´í´ë´ ìë¤.
sayHi("John"); // Hello, John
function sayHi(name) {
alert( `Hello, ${name}` );
}
í¨ì ì ì¸ë¬¸, sayHië ì¤í¬ë¦½í¸ ì¤í ì¤ë¹ ë¨ê³ìì ìì±ë기 ë문ì, ì¤í¬ë¦½í¸ ë´ ì´ëììë ì ê·¼í ì ììµëë¤.
ê·¸ë¬ë í¨ì ííìì¼ë¡ ì ìí í¨ìë í¨ìê° ì ì¸ë기 ì ì ì ê·¼íë ê² ë¶ê°ë¥í©ëë¤.
sayHi("John"); // error!
let sayHi = function(name) { // (*) ë§ì ì ì¼ì´ëì§ ììµëë¤.
alert( `Hello, ${name}` );
};
í¨ì ííìì ì¤í íë¦ì´ ííìì ë¤ë¤ëì ë ë§ë¤ì´ì§ëë¤. ì ìììì (*)ë¡ íìí ì¤ì ì¤í íë¦ì´ ëë¬íì ë í¨ìê° ë§ë¤ì´ì§ëë¤. ì주 ë¦ì£ .
ì¸ ë²ì§¸ ì°¨ì´ì ì, ì¤ì½íì ëë¤.
ì격 모ëìì í¨ì ì ì¸ë¬¸ì´ ì½ë ë¸ë¡ ë´ì ìì¹íë©´ í´ë¹ í¨ìë ë¸ë¡ ë´ ì´ëìë ì ê·¼í ì ììµëë¤. íì§ë§ ë¸ë¡ ë°ììë í¨ìì ì ê·¼íì§ ëª»í©ëë¤.
ìì를 ë¤ì´ ì¤ëª
í´ ë³´ê² ìµëë¤. ë°íìì ê·¸ ê°ì ì ì ìë ë³ì ageê° ìê³ , ì´ ë³ìì ê°ì ë°ë¼ í¨ì welcome()ì ë¤ë¥´ê² ì ìí´ì¼ íë ìí©ì
ëë¤. ê·¸ë¦¬ê³ í¨ì welcome()ì ëì¤ì ì¬ì©í´ì¼ íë ìí©ì´ë¼ê³ ê°ì í´ ë³´ì£ .
í¨ì ì ì¸ë¬¸ì ì¬ì©íë©´ ìëí ëë¡ ì½ëê° ëìíì§ ììµëë¤.
let age = prompt("ëì´ë¥¼ ìë ¤ì£¼ì¸ì.", 18);
// ì¡°ê±´ì ë°ë¼ í¨ì를 ì ì¸í¨
if (age < 18) {
function welcome() {
alert("ìë
!");
}
} else {
function welcome() {
alert("ìë
íì¸ì!");
}
}
// í¨ì를 ëì¤ì í¸ì¶í©ëë¤.
welcome(); // Error: welcome is not defined
í¨ì ì ì¸ë¬¸ì í¨ìê° ì ì¸ë ì½ë ë¸ë¡ ìììë§ ì í¨í기 ë문ì ì´ë° ìë¬ê° ë°ìí©ëë¤.
ë ë¤ë¥¸ ìì를 ì´í´ë´ ìë¤.
let age = 16; // 16ì ì ì¥íë¤ ê°ì í©ìë¤.
if (age < 18) {
welcome(); // \ (ì¤í)
// |
function welcome() { // |
alert("ìë
!"); // | í¨ì ì ì¸ë¬¸ì í¨ìê° ì ì¸ë ë¸ë¡ ë´
} // | ì´ëììë ì í¨í©ëë¤
// |
welcome(); // / (ì¤í)
} else {
function welcome() {
alert("ìë
íì¸ì!");
}
}
// ì¬ê¸°ë ì¤ê´í¸ ë°ì´ê¸° ë문ì
// ì¤ê´í¸ ììì ì ì¸í í¨ì ì ì¸ë¬¸ì í¸ì¶í ì ììµëë¤.
welcome(); // Error: welcome is not defined
ê·¸ë¼ if문 ë°ìì welcome í¨ì를 í¸ì¶í ë°©ë²ì ìë 걸ê¹ì?
í¨ì ííìì ì¬ì©íë©´ ê°ë¥í©ëë¤. if문 ë°ì ì ì¸í ë³ì welcomeì í¨ì ííìì¼ë¡ ë§ë í¨ì를 í ë¹íë©´ ëì£ .
ì´ì ì½ëê° ìëí ëë¡ ëìí©ëë¤.
let age = prompt("ëì´ë¥¼ ìë ¤ì£¼ì¸ì.", 18);
let welcome;
if (age < 18) {
welcome = function() {
alert("ìë
!");
};
} else {
welcome = function() {
alert("ìë
íì¸ì!");
};
}
welcome(); // ì ëë¡ ëìí©ëë¤.
물ìí ì°ì°ì ?를 ì¬ì©íë©´ ì ì½ë를 ì¢ ë ë¨ìíí ì ììµëë¤.
let age = prompt("ëì´ë¥¼ ìë ¤ì£¼ì¸ì.", 18);
let welcome = (age < 18) ?
function() { alert("ìë
!"); } :
function() { alert("ìë
íì¸ì!"); };
welcome(); // ì ëë¡ ëìí©ëë¤.
ì ê²½íì ë°ë¥´ë©´ í¨ì ì ì¸ë¬¸ì ì´ì©í´ í¨ì를 ì ì¸íë 걸 먼ì ê³ ë ¤íë ê² ì¢ìµëë¤. í¨ì ì ì¸ë¬¸ì¼ë¡ í¨ì를 ì ìíë©´, í¨ìê° ì ì¸ë기 ì ì í¸ì¶í ì ìì´ì ì½ë 구ì±ì ì¢ ë ìì ë¡ê² í ì ììµëë¤.
í¨ì ì ì¸ë¬¸ì ì¬ì©íë©´ ê°ë
ì±ë ì¢ìì§ëë¤. ì½ëìì let f = function(â¦) {â¦}ë³´ë¤ function f(â¦) {â¦} ì ì°¾ë ê² ë ì½ì£ . í¨ì ì ì¸ ë°©ìì´ ë âë길ì ì¬ë¡ì¡ìµëë¤â.
ê·¸ë¬ë ì´ë¤ ì´ì ë¡ í¨ì ì ì¸ ë°©ìì´ ì í©íì§ ìê±°ë, (ì ìì ì ê°ì´) ì¡°ê±´ì ë°ë¼ í¨ì를 ì ì¸í´ì¼ íë¤ë©´ í¨ì ííìì ì¬ì©í´ì¼ í©ëë¤.
ìì½
- í¨ìë ê°ì ëë¤. ë°ë¼ì í¨ìë ê°ì²ë¼ í ë¹, ë³µì¬, ì ì¸í ì ììµëë¤.
- âí¨ì ì ì¸(문)â ë°©ìì¼ë¡ í¨ì를 ìì±íë©´, í¨ìê° ë 립ë 구문 ííë¡ ì¡´ì¬íê² ë©ëë¤.
- âí¨ì ííìâ ë°©ìì¼ë¡ í¨ì를 ìì±íë©´, í¨ìê° ííìì ì¼ë¶ë¡ ì¡´ì¬íê² ë©ëë¤.
- í¨ì ì ì¸ë¬¸ì ì½ë ë¸ë¡ì´ ì¤íë기ë ì ì ì²ë¦¬ë©ëë¤. ë°ë¼ì ë¸ë¡ ë´ ì´ëìë íì© ê°ë¥í©ëë¤.
- í¨ì ííìì ì¤í íë¦ì´ ííìì ë¤ë¤ëì ë ë§ë¤ì´ì§ëë¤.
í¨ì를 ì ì¸í´ì¼ íë¤ë©´ í¨ìê° ì ì¸ë기 ì´ì ìë í¨ì를 íì©í ì ì기 ë문ì, í¨ì ì ì¸ë¬¸ ë°©ìì ë°ë¥´ë ê² ì¢ìµëë¤. í¨ì ì ì¸ ë°©ìì ì½ë를 ì ì°íê² êµ¬ì±í ì ìëë¡ í´ì£¼ê³ , ê°ë ì±ë ì¢ìµëë¤.
í¨ì ííìì í¨ì ì ì¸ë¬¸ì ì¬ì©íëê² ë¶ì ì í ëì ì¬ì©íë ê²ì´ ì¢ìµëë¤. ì´ë² ì±í°ìì í¨ì ííìì ì¬ì©í´ì¼ë§ íë ê²½ì°ë¥¼ ëª ê°ì§ ììë³´ìëë°, íí ë¦¬ì¼ ë¤ìª½ìì ì¢ ë ê¹ê² í´ë¹ ì¬ë¡ë¥¼ ì´í´ë³´ëë¡ íê² ìµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.