å
å»ºå½æ° 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 å
ç代ç å¨å½åè¯æ³ç¯å¢ï¼lexical environmentï¼ä¸æ§è¡ï¼å æ¤å®è½è®¿é®å¤é¨åéï¼
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 ä¹ä¸å¯ä»å¤é¨è¿è¡è®¿é®
妿ä¸å¯ç¨ä¸¥æ ¼æ¨¡å¼ï¼eval 没æå±äºèªå·±çè¯æ³ç¯å¢ï¼å æ¤æä»¬å¯ä»¥ä»å¤é¨è®¿é®åé x å彿° fã
ä½¿ç¨ âevalâ
ç°ä»£ç¼ç¨ä¸ï¼å·²ç»å¾å°ä½¿ç¨ eval äºã人们ç»å¸¸è¯´âeval æ¯é鬼âã
åå å¾ç®åï¼å¾ä¹
å¾ä¹
以åï¼JavaScript æ¯ä¸ç§é常弱çè¯è¨ï¼å¾å¤ä¸è¥¿åªè½éè¿ eval æ¥å®æãä¸è¿é£å·²ç»æ¯åå¹´åçäºäºã
å¦ä»å 乿¾ä¸å°ä½¿ç¨ eval ççç±äºã妿æäººå¨ä½¿ç¨å®ï¼é£è¿æ¯ä¸ä¸ªå¾å¥½ç使ç¨ç°ä»£è¯è¨ç»ææ JavaScript Module æ¥æ¿æ¢å®ä»¬çæºä¼ã
请注æï¼eval 访é®å¤é¨åéçè½åä¼äº§çå¯ä½ç¨ã
代ç å缩工å
·ï¼å¨æ JS æå
¥ç产ç¯å¢å对å
¶è¿è¡å缩çå·¥å
·ï¼å°å±é¨åééå½å为æ´ççåéï¼ä¾å¦ a å b çï¼ï¼ä»¥ä½¿ä»£ç ä½ç§¯æ´å°ãè¿é常æ¯å®å
¨çï¼ä½å¨ä½¿ç¨äº eval çæ
åµä¸å°±ä¸ä¸æ ·äºï¼å 为å±é¨åéå¯è½ä¼è¢« eval ä¸ç代ç 访é®å°ãå æ¤å缩工å
·ä¸ä¼å¯¹ææå¯è½ä¼è¢«ä» eval ä¸è®¿é®çåéè¿è¡éå½åãè¿æ ·ä¼å¯¼è´ä»£ç å缩çéä½ã
å¨ eval ä¸ä½¿ç¨å¤é¨å±é¨åéä¹è¢«è®¤ä¸ºæ¯ä¸ä¸ªåçç¼ç¨ä¹ æ¯ï¼å 为è¿ä¼ä½¿ä»£ç ç»´æ¤å徿´å å°é¾ã
æä¸¤ç§æ¹æ³å¯ä»¥å®å ¨é¿å æ¤ç±»é®é¢ã
妿 eval ä¸çä»£ç æ²¡æä½¿ç¨å¤é¨åéï¼è¯·ä»¥ window.eval(...) çå½¢å¼è°ç¨ evalï¼
éè¿è¿ç§æ¹å¼ï¼è¯¥ä»£ç 便ä¼å¨å ¨å±ä½ç¨åå æ§è¡ï¼
let x = 1;
{
let x = 5;
window.eval('alert(x)'); // 1ï¼å
¨å±åéï¼
}
妿 eval ä¸ç代ç éè¦è®¿é®å±é¨åéï¼æä»¬å¯ä»¥ä½¿ç¨ new Function æ¿ä»£ evalï¼å¹¶å°å®ä»¬ä½ä¸ºåæ°ä¼ éï¼
let f = new Function('a', 'alert(a)');
f(5); // 5
æä»¬å¨ "new Function" è¯æ³ ä¸ç« ä¸å¯¹ new Function æé å¨è¿è¡äºè¯¦ç»è¯´æãnew Function ä»å符串å建ä¸ä¸ªå½æ°ï¼å¹¶ä¸ä¹æ¯å¨å
¨å±ä½ç¨åä¸çãæä»¥å®æ æ³è®¿é®å±é¨åéã使¯ï¼æ£å¦ä¸é¢ç示ä¾ä¸æ ·ï¼å°å®ä»¬ä½ä¸ºåæ°è¿è¡æ¾å¼ä¼ éè¦æ¸
æ°å¾å¤ã
æ»ç»
è°ç¨ eval(code) ä¼è¿è¡ä»£ç å符串ï¼å¹¶è¿åæå䏿¡è¯å¥çç»æã
- å¨ç°ä»£ JavaScript ç¼ç¨ä¸ï¼å¾å°ä½¿ç¨å®ï¼é常ä¹ä¸éè¦ä½¿ç¨å®ã
- å¯ä»¥è®¿é®å¤é¨å±é¨åéãè¿è¢«è®¤ä¸ºæ¯ä¸ä¸ªä¸å¥½çç¼ç¨ä¹ æ¯ã
- è¦å¨å
¨å±ä½ç¨åä¸
eval代ç ï¼å¯ä»¥ä½¿ç¨window.eval(code)è¿è¡æ¿ä»£ã - æ¤å¤ï¼å¦æä½ ç代ç éè¦ä»å¤é¨ä½ç¨åè·åæ°æ®ï¼è¯·ä½¿ç¨
new Functionï¼å¹¶å°æ°æ®ä½ä¸ºåæ°ä¼ éç»å½æ°ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼