ë´ì¥ í¨ì evalì ì¬ì©íë©´ 문ìì´ ííì ì½ë를 ì¤íí ì ììµëë¤.
문ë²ì ë¤ìê³¼ ê°ìµëë¤.
let result = eval(code);
ìì:
let code = 'alert("Hello")';
eval(code); // Hello
길ì´ê° 긴 문ìì´ì´ ì½ëê° ë ì ìëë°, ì¬ê¸°ì ì¤ ë°ê¿, í¨ì ì ì¸, ë³ì ë±ì´ í¬í¨ë ìë ììµëë¤.
ë§ì§ë§ 구문ì ê²°ê³¼ê° evalì ê²°ê³¼ê° ë©ëë¤.
ìì:
let value = eval('1+1');
alert(value); // 2
let value = eval('let i = 0; ++i');
alert(value); // 1
evalë¡ ëë¬ì¼ ì½ëë íì¬ ë ì컬 íê²½ìì ì¤íëë¯ë¡ ì¸ë¶ ë³ìì ì ê·¼í ì ììµëë¤.
let a = 1;
function f() {
let a = 2;
eval('alert(a)'); // 2
}
f();
ì¸ë¶ ë³ì를 ë³ê²½íë ê²ë ê°ë¥íì£ .
let x = 5;
eval("x = 10");
alert(x); // 10, ë³ê²½ë ê°
ì격 모ëìì evalì ìì²´ ë ì컬 íê²½ì ê°ê³ ììµëë¤. ë°ë¼ì eval ë´ë¶ì ì ì¸ë í¨ìì ë³ìë ì¸ë¶ìì ì½ì ì ììµëë¤.
// ì°¸ê³ : ì¤í ê°ë¥í 모ë ììì 'use strict'ê° ì ì©ëì´ììµëë¤.
eval("let x = 5; function f() {}");
alert(typeof x); // undefined (ìë ë³ì)
// í¨ì fë ì½ì ì ìì
use strictê° ì ì©ëì´ìì§ ìì ê²½ì°ì evalì ìì²´ ë ì컬 íê²½ì ê°ì§ ì기 ë문ì ì¸ë¶ì ìë xì f를 ì½ì ì ììµëë¤.
âevalâ ì¬ì©í기
evalì 모ë íë¡ê·¸ëë°ìì ì ì¬ì©ëì§ ììµëë¤. "eval is evil(ì
ë§)"ì´ë¼ê³ ê¹ì§ ë¶ë¦¬ì£ .
ì´ì ë ê°ë¨í©ëë¤. 과거ì ìë°ì¤í¬ë¦½í¸ìì ì¸ ì ìë 기ë¥ì´ ë§ì§ ìì기 ë문ì evalì ì¬ì©í´ì¼ë§ ì²ë¦¬í ì ìë ê²ë¤ì´ ë§ììµëë¤. íì§ë§ ê·¸ ì´íë¡ 10ì¬ ë
ì´ í르면ì ìë°ì¤í¬ë¦½í¸ë ê°ë ¥í ì¸ì´ë¡ ë³ëª¨íìì£ .
ì§ê¸ì evalì ì¬ì©í ì´ì ê° ê±°ì ììµëë¤. ëêµ°ê°ê° ì¬ì í evalì ì¬ì©íê³ ìë¤ë©´, 모ëí ì¸ì´ 문ë²ì´ë 모ëì ì¬ì©í´ ì½ë를 ë°ê¾¸ë 걸 ê¶ì í´ ë³´ì기 ë°ëëë¤.
evalì ì¬ì©í ë ì¸ë¶ ë³ìì ì ê·¼ ì ë¶ìì©ì´ ë°ìíë¤ë ì ì ì ìíì ì¼ í©ëë¤.
ì í리ì¼ì´ì
ì´ ì¶ì ë기 ì ì ìë°ì¤í¬ë¦½í¸ íì¼ì ìì¶í´ì£¼ë ëêµ¬ì¸ ì½ë ìì¶ê¸°(minifier)ë ì¤í¬ë¦½í¸ í¬ê¸°ë¥¼ ì¤ì´ê¸° ìí´ ì§ì ë³ìëª
ì aë bê°ì´ ì§§ê² ë³ê²½í©ëë¤. ëê°ë ì´ ê³¼ì ìì ë¶ìì©ì´ ë°ìíì§ ìì§ë§, evalì ì¬ì©íë©´ evalë¡ ê°ì¼ ì½ëìì ì§ì ë³ìì ì ê·¼í ì ìì¼ë¯ë¡ ìì íì§ ììµëë¤. ì´ë° ìíì ë°©ì§í기 ìí´ ìì¶ê¸°ë eval ë´ë¶ ì½ëìì ì ê·¼í ê°ë¥ì±ì´ ìë 모ë ë³ìì ì´ë¦ì ë³ê²½íì§ ììµëë¤. ì´ë ì½ë ìì¶ë¥ ì ë¶ì ì ì¸ ìí¥ì 미칩ëë¤.
eval ë´ë¶ìì ì¸ë¶ ì§ì ë³ì를 ì¬ì©íë ê²ì ì½ë ì ì§ ë³´ì를 ë ì´ë µê² ë§ë¤ê¸° ë문ì ì¢ì§ ìì íë¡ê·¸ëë° ê´ìµì¼ë¡ ì·¨ê¸ë기ë í©ëë¤.
ìì ê°ì 문ì ë ìëìì ìê°í´ ë릴 ë°©ë² ë ê°ë¥¼ ì¬ì©í´ ìë°©í ì ììµëë¤.
evalë¡ ê°ì¼ ì½ëìì ì¸ë¶ ë³ì를 ì¬ì©íì§ ìëë¤ë©´ eval ëì window.eval(...)ì í¸ì¶íì¸ì.
ì´ë ê² íë©´ eval ë´ì ì½ëê° ì ì ì¤ì½íìì ì¤íë©ëë¤.
let x = 1;
{
let x = 5;
window.eval('alert(x)'); // 1 (ì ì ë³ì)
}
evalë¡ ê°ì¼ ì½ëìì ì§ì ë³ì를 ì¬ì©íë¤ë©´, evalì´ ìë new Functionì 문ìì´ë¡ ë ì½ë를 ì ë¬íì¸ì.
let f = new Function('a', 'alert(a)');
f(5); // 5
new Function 문ë²(ìì¸í ë´ì©ì new Function ë¬¸ë² ì±í°ìì ì´í´ë´)ì ì¸ìë¡ ë°ì 문ìì´ì 기ë°ì¼ë¡ ì ì ì¤ì½íì ìë¡ì´ í¨ì를 ë§ë¤ì´ì¤ëë¤. ë°ë¼ì ì§ì ë³ìì ì ê·¼í ì ìì£ . íì§ë§ ì ììììì²ë¼ ì½ë ë´ë¶ìì ì§ì ë³ìì ì ê·¼íì§ ë§ê³ ì¸ì를 íµí´ ê°ì ë°ë ê² í¨ì¬ ë ëª
ííë¤ë ê²ì ìê³ ê³ì기 ë°ëëë¤.
ìì½
eval(code)ì í¸ì¶íë©´ 문ìì´ ííì codeê° ì¤íëëë° ì´ë ë§ì§ë§ 구문ì ê²°ê³¼ê° ë°íë©ëë¤.
- 모ë ìë°ì¤í¬ë¦½í¸ì evalì ëì²´í ì ìë 문ë²ì´ ë§ê¸° ë문ì, 모ë ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©íë ì½ëìì evalì ì ì¬ì©íì§ ììµëë¤.
- evalì ì´ì©í´ ë§ë ì½ëë ì¸ë¶ ì§ì ë³ìì ì ê·¼í ì ìëë°, ì´ë ì¢ì§ ìì ë°©ë²ì ëë¤.
- ì ì ì¤ì½íìì
evalì ì¬ì©íì§ ë§ê³ ,window.eval(code)ì ì´ì©íì¸ì. - ì¸ë¶ ì¤ì½íì ìë ë°ì´í°ê° íìíë¤ë©´
new Functionì ì¸ìì ì½ë를 ì ë¬í´ ì¬ì©íìë©´ ë©ëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.