颿°ãä½ãããï¼ã¤ã®æ¹æ³ãããã¾ããã»ã¨ãã©ä½¿ããã¾ããããä»£æ¿ææ®µããªããã¨ããã¾ã«ããã¾ãã
æ§æ
颿°ãä½ãæ§æã§ã:
let func = new Function ([arg1[, arg2[, ...argN]],] functionBody)
弿° arg2...argN ã¨æå®ããã functionBody ã§é¢æ°ã使ããã¾ãã
ä¾ãè¦ãã¨çè§£ãæãã§ãã以ä¸ã¯2ã¤ã®å¼æ°ãæã¤é¢æ°ã§ã:
let sum = new Function('a', 'b', 'return a + b');
alert( sum(1, 2) ); // 3
弿°ããªãå ´åã¯é¢æ°æ¬ä½ã ããæå®ãã¾ã:
let sayHi = new Function('alert("Hello")');
sayHi(); // Hello
ããã¾ã§è¦ã¦ãããããªä»ã®æ¹æ³ã¨ã®å¤§ããªéãã¯ã颿°ã¯æåéãæååããä½ãããå®è¡æã«æ¸¡ãããã¨ãããã¨ã§ãã
ããã¾ã§ã®ãã¹ã¦ã®å®£è¨ã¯ãããã°ã©ãã¼ãã¹ã¯ãªããã«é¢æ°ã³ã¼ããæ¸ãå¿ è¦ãããã¾ããã
ããããnew Function ã¯ä»»æã®æååã颿°ã«ãããã¨ãã§ãã¾ããä¾ãã°ããµã¼ãããæ°ãã颿°ãåãåããããå®è¡ãããã¨ãã§ãã¾ã:
let str = ... ãµã¼ãããåçã«ã³ã¼ããåãåã ...
let func = new Function(str);
func();
ãã㯠è¤éãªWebã¢ããªã±ã¼ã·ã§ã³ã§ãµã¼ãããã³ã¼ããåãåã£ããããã³ãã¬ã¼ãããåçã«é¢æ°ãã³ã³ãã¤ã«ãããããªãé常ã«ç¹å®ã®ã±ã¼ã¹ã§ä½¿ããã¾ãã
ã¯ãã¼ã¸ã£
é常ã颿°ã¯ç¹å¥ãªãããã㣠[[Environment]] ã§ã©ãã§çæãããããè¦ãã¦ãã¾ããããã¯ä½æãããå ´æããã¬ãã·ã«ã«ç°å¢ãåç
§ãã¾ãï¼å¤æ°ã¹ã³ã¼ããã¯ãã¼ã¸ã£ ã®ç« ã§èª¬æãã¾ããï¼ã
ããããnew Function ã使ç¨ãã¦ä½ããã颿°ã®å ´åããã® [[Environment]] ã¯ç¾å¨ã®ã¬ãã·ã«ã«ç°å¢ã§ã¯ãªããã°ãã¼ãã«ã®ã¬ãã·ã«ã«ç°å¢ãåç
§ãã¾ãã
ãã®ããããã®ãããªé¢æ°ã¯å¤é¨å¤æ°ã¸ã®ã¢ã¯ã»ã¹ã¯æãããã°ãã¼ãã«å¤æ°ã®ã¿ã¨ãªãã¾ãã
function getFunc() {
let value = "test";
let func = new Function('alert(value)');
return func;
}
getFunc()(); // error: value ã¯æªå®ç¾©
éå¸¸ã®æ¯ãèãã¨ã®æ¯è¼ã§ã:
function getFunc() {
let value = "test";
let func = function() { alert(value); };
return func;
}
getFunc()(); // "test", getFunc ã®ã¬ãã·ã«ã«ç°å¢ãã
ãã® new Function ã®ç¹æ®ãªæ©è½ã¯å¥å¦ã«è¦ãã¾ãããå®è·µã§ã¯é常ã«å½¹ç«ã¡ã¾ãã
æ¬å½ã«æååãã颿°ãä½ãå¿ è¦ãããå ´åãã¤ã¡ã¼ã¸ãã¦ãã ããããã®é¢æ°ã®ã³ã¼ãã¯ã¹ã¯ãªããçææã«ã¯ç¥ããã¦ãã¾ãã(ãããã訳ã§é常ã®é¢æ°ã使ããã¨ãã§ãã¾ãã)ããå®è¡ä¸ã«èªèããã¾ããæã ã¯ãµã¼ããå¥ã®ã½ã¼ã¹ãããããåãåããã¨ãã§ãã¾ãã
æ°ãã颿°ã¯ã¡ã¤ã³ã®ã¹ã¯ãªããã¨ç¸äºã«ããåããå¿ è¦ã§ãã
å¤é¨å¤æ°ã¸ã¢ã¯ã»ã¹ãããã¨ãã¯ã©ãããã®ã§ããããï¼
åé¡ã¯JavaScriptãæ¬çªç°å¢ã«å ¬éãããåã«ãminifierï¼ä½åãªã³ã¡ã³ããã¹ãã¼ã¹ãªã©ãåé¤ãããã¨ã§ã³ã¼ãå°ããããç¹å¥ãªããã°ã©ã ï¼ã使ç¨ãã¦å§ç¸®ããã¦ãããéè¦ãªãã¨ã¯ãã¼ã«ã«å¤æ°ãããçããã®ã«ãªãã¼ã ãã¾ãã
ä¾ãã°ããã颿°ã let userName ãæã£ã¦ããã¨ããminifier ã¯ããã let a (ã¾ãã¯æ¢ã«ä½¿ããã¦ããã°å¥ã®æå) ã«ç½®ãæãããã®å¤æ°ã使ç¨ãã¾ãã夿°ã¯ãã¼ã«ã«ã§ãã颿°ã®å¤é¨ããã¢ã¯ã»ã¹ãããã¨ã¯ã§ããªããããããã¯é常å®å
¨ã§ããã¾ãã颿°ã®å
å´ã§ã¯ minifier ã¯ããã«é¢ããå
¨ã¦ã®ç®æãç½®ãæãã¾ããMinifiers ã¯è³¢ãã®ã§ãåãªãæ¤ç´¢ã¨ç½®æã§ã¯ãªããã³ã¼ãæ§é ãåæããã®ã§åé¡ããã¾ããã
ãã®ãããnew Function ãå¤é¨å¤æ°ã¸ã¢ã¯ã»ã¹ããå ´åããªãã¼ã ããã userName ãè¦ã¤ãããã¨ã¯ã§ãã¾ããã
new Function ãå¤é¨å¤æ°ã¸ã¢ã¯ã»ã¹ããå ´åãminifiers ã§åé¡ã«ãªãã¾ãã
å ãã¦ããã®ãããªã³ã¼ãã¯ã¢ã¼ããã¯ãã£çã«è¯ããªããã¨ã©ã¼ã«ãªããããã§ãã
new Function ã¨ãã¦ä½æããã颿°ã«ä½ããæ¸¡ãã«ã¯ããã®å¼æ°ã使ç¨ããªããã°ãªãã¾ããã
ãµããª
æ§æ:
let func = new Function ([arg1, arg2, ...argN], functionBody);
æ´å²çãªçç±ããã弿°ã¯ã«ã³ãåºåãã®ãªã¹ãã§ä¸ãããã¾ãã
ãããã®3ã¤ã®æå³ã¯åãã§ã:
new Function('a', 'b', ' return a + b; '); // åºæ¬æ§æ
new Function('a,b', ' return a + b; '); // ã«ã³ãåºåã
new Function('a , b', ' return a + b; '); // ã¹ãã¼ã¹ããã®ã«ã³ãåºåã
new Function ã§ä½ããã颿°ã¯ ã°ãã¼ãã«ã¬ãã·ã«ã«ç°å¢ãåç
§ãã [[Environment]] ãæã£ã¦ãããå¤é¨ã®ã¬ãã·ã«ã«ç°å¢ã§ã¯ããã¾ãããå¾ã£ã¦ããããã¯å¤é¨ã®å¤æ°ã使ããã¨ãã§ãã¾ãããã§ãããããã¯è¯ããã¨ã§ããæç¤ºçãªãã©ã¡ã¼ã¿æ¸¡ãã¯ã¢ã¼ããã¯ãã£çã«ã¯ããããæ¹æ³ã§ãããminifierã®åé¡ãèµ·ãã¾ããã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã