Baseline Widely available
Function()
ìì±ìë Function
ê°ì²´ë¥¼ ìì±í©ëë¤. ì´ ìì±ì를 ì§ì í¸ì¶íë©´ ëì ì¼ë¡ í¨ì를 ë§ë¤ ì ìì§ë§, eval()
í¨ìì ë¹ì·í ë³´ì ë° ë¯¸ë¯¸í ì±ë¥ ìì 문ì ê° ììµëë¤. íì§ë§ ì§ì ë²ìì ì ê·¼í ì ìë eval
ê³¼ ë¬ë¦¬, Function
ìì±ìë ì¤ì§ ì ì ë²ìììë§ ì¤íëë í¨ì를 ìì±í©ëë¤.
const sum = new Function("a", "b", "return a + b");
console.log(sum(2, 6));
// Expected output: 8
구문
new Function(functionBody)
new Function(arg1, functionBody)
new Function(arg1, arg2, functionBody)
new Function(arg1, arg2, /* â¦, */ argN, functionBody)
Function(functionBody)
Function(arg1, functionBody)
Function(arg1, arg2, functionBody)
Function(arg1, arg2, /* â¦, */ argN, functionBody)
매ê°ë³ìì°¸ê³ :
Function()
ìnew
를 ì¬ì©íì¬ í¸ì¶íê±°ë ìì´ í¸ì¶í ì ììµëë¤. ë ë°©ë² ëª¨ë ìë¡ì´Function
ì¸ì¤í´ì¤ë¥¼ ìì±í©ëë¤.
arg1
, â¦, argN
Optional
í¨ìê° ê³µìì ì¸ ì¸ì ì´ë¦ì¼ë¡ ì¬ì©í ì´ë¦. ê° ì´ë¦ì ì í¨í JavaScript 매ê°ë³ì를 ëíë´ë 문ìì´ì´ì´ì¼ í©ëë¤(ì¼ë° ìë³ì, ëë¨¸ì§ ë§¤ê°ë³ì, ëë 구조 ë¶í´ë 매ê°ë³ì ì¤ íëì´ë©°, ì íì ì¼ë¡ 기본ê°ì ê°ì§ ì ìì). ëë ì´ë° 문ìì´ë¤ì´ ì¼íë¡ êµ¬ë¶ë 목ë¡ì´ì´ì¼ í©ëë¤.
매ê°ë³ìë í¨ì ííìê³¼ ëì¼í ë°©ìì¼ë¡ 구문 ë¶ìë기 ë문ì 공백과 주ìì´ íì©ë©ëë¤. ì: "x", "theValue = 42", "[a, b] /* numbers */"
ëë "x, theValue = 42, [a, b] /* numbers */"
. ("x, theValue = 42", "[a, b]"
ë ë§ì§ë§ ì½ê¸°ê° ë§¤ì° í¼ëì¤ë¬ì¸ ì ììµëë¤.)
functionBody
í¨ì ì ì를 구ì±íë JavaScript ë¬¸ì´ í¬í¨ë 문ìì´.
Function
ìì±ì를 ì¬ì©íì¬ ìì±ë Function
ê°ì²´ë í¨ìê° ìì±ë ë 구문 ë¶ìë©ëë¤. ì´ë í¨ì ííìì´ë í¨ì ì ì¸ì ì¬ì©íì¬ í¨ì를 ìì±íê³ ì½ë ë´ìì í¸ì¶íë ê²ë³´ë¤ ë¹í¨ì¨ì ì
ëë¤. ì´ë° í¨ìë¤ì ì½ëì ëë¨¸ì§ ë¶ë¶ê³¼ í¨ê» 구문 ë¶ìë기 ë문ì
ëë¤.
í¨ìì ì ë¬ë 모ë ì¸ì ì¤ ë§ì§ë§ì ì ì¸í ë머ì§ë ìì±ë í¨ìì 매ê°ë³ì ìë³ìì ì´ë¦ì¼ë¡, ì ë¬ë ììëë¡ ì²ë¦¬ë©ëë¤. í¨ìë ëì ì¼ë¡ í¨ì ííìì¼ë¡ ì»´íì¼ëë©°, ë¤ìê³¼ ê°ì ë°©ìì¼ë¡ ìì¤ê° ì¡°í©ë©ëë¤.
`function anonymous(${args.join(",")}
) {
${functionBody}
}`;
ì´ë í¨ìì toString()
ë©ìë를 í¸ì¶íì¬ ê´ì°°í ì ììµëë¤.
ê·¸ë¬ë ì¼ë°ì ì¸ í¨ì ííìê³¼ë ë¬ë¦¬, anonymous
ë¼ë ì´ë¦ì´ functionBody
ì ë²ìì ì¶ê°ëì§ ììµëë¤. ì´ë functionBody
ê° ì ì ë²ììë§ ì ê·¼í ì ì기 ë문ì
ëë¤. ë§ì½ functionBody
ê° ì격 모ë(í¨ì 본문 ìì²´ê° "use strict"
ì§ìì´ë¥¼ ê°ì ¸ì¼ í©ëë¤. 문맥ì¼ë¡ë¶í° ì격 모ë ì¤ì ì ììë°ì§ ì기 ë문ì
ëë¤)ì ìì§ ìë¤ë©´, í¨ì ì체를 참조í기 ìí´ arguments.callee
를 ì¬ì©í ì ììµëë¤. ëìì¼ë¡, ì¬ê· ë¶ë¶ì ë´ë¶ í¨ìë¡ ì ìí ì ììµëë¤.
const recursiveFn = new Function(
"count",
`
(function recursiveFn(count) {
if (count < 0) {
return;
}
console.log(count);
recursiveFn(count - 1);
})(count);
`,
);
ë ê°ì ëì ì¼ë¡ ì¡°í©ë ìì¤ ë¶ë¶ â 매ê°ë³ì ëª©ë¡ args.join(",")
ì functionBody
â ì ê°ê° 구문ì ì¼ë¡ ì í¨íì§ íì¸í기 ìí´ ë¨¼ì ë³ëë¡ êµ¬ë¬¸ ë¶ìë©ëë¤. ì´ë 주ì
공격과 ê°ì ìë를 ë°©ì§í©ëë¤.
new Function("/*", "*/) {");
// SyntaxError: Unexpected end of arg string
// Doesn't become "function anonymous(/*) {*/) {}"
ìì Function ìì±ìì í¨ê» ì¸ì ëª
ìí기
ë¤ì ì½ëë ë ê°ì ì¸ì를 ë°ë Function
ê°ì²´ë¥¼ ìì±í©ëë¤.
// ìì ë ì¬ë¬ë¶ì JavaScript ì½ììì ë°ë¡ ì¤íí ì ììµëë¤
// ë ê°ì ì¸ì를 ë°ë í¨ì를 ìì±íê³ , ì¸ìì í©ì ë°íí©ëë¤
const adder = new Function("a", "b", "return a + b");
// í¨ì í¸ì¶
adder(2, 6);
// 8
ì¸ì a
ì b
ë í¨ì 본문 return a + b
ìì ì¬ì©íë ê³µìì ì¸ ì¸ì ì´ë¦ì
ëë¤.
// í¨ì ìì±ìë ì¸ë¯¸ì½ë¡ ì¼ë¡ ë¶ë¦¬ë ì¬ë¬ 문ì ì·¨í ì ììµëë¤. í¨ì ííìì í¨ì ì´ë¦ê³¼ í¨ê» return ë¬¸ì´ íìí©ëë¤.
// ì¬ê¸°ì new Function ì´ í¸ì¶ëë ê²ì íì¸íì¸ì. ì´ë ê² íë©´ ì°ë¦¬ê° ìì±í í¨ì를 ë°ë¡ í¸ì¶í ì ììµëë¤.
const sumOfArray = new Function(
"const sumArray = (arr) => arr.reduce((previousValue, currentValue) => previousValue + currentValue); return sumArray",
)();
// í¨ì í¸ì¶
sumOfArray([1, 2, 3, 4]);
// 10
// ìì± ìì ìì new Function ì í¸ì¶íì§ ìì¼ë©´, ì´ë¥¼ í¸ì¶í기 ìí´ Function.call() ë©ìë를 ì¬ì©í ì ììµëë¤
const findLargestNumber = new Function(
"function findLargestNumber (arr) { return Math.max(...arr) }; return findLargestNumber",
);
// í¨ì í¸ì¶
findLargestNumber.call({}).call({}, [2, 4, 1, 8, 5]);
// 8
// í¨ì ì ì¸ì ë°íë¬¸ì´ íìê° ìëëë¤
const sayHello = new Function(
"return function (name) { return `Hello, ${name}` }",
)();
// í¨ì í¸ì¶
sayHello("world");
// Hello, world
ëª
ì¸ì ë¸ë¼ì°ì í¸íì± ê°ì´ 보기
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4