ÙÙØ§Ù طرÙÙØ© Ø£Ø®Ø±Ù ÙØ¨Ùاء Ø§ÙØ¯Ø§ÙØ©. ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ© ÙØ§Ø¯Ø±Ø© Ø§ÙØ¥Ø³ØªØ®Ø¯Ø§Ù ÙÙ٠أØÙØ§ÙØ§Ù ÙØ§ ÙÙØ¬Ø¯ بدÙÙ ÙÙØ§.
ترÙÙØ¨ Ø§ÙØ¬Ù ÙØ©
ترÙÙØ¨ Ø¬Ù ÙØ© Ø¨ÙØ§Ø¡ Ø§ÙØ¯Ø§ÙØ©:
let func = new Function([arg1, arg2, ...argN], functionBody);
Ø¨ÙØ°Ø§ Ø§ÙØªØ±ÙÙØ¨ تÙ
صÙÙØ¹ Ø¯Ø§ÙØ© ÙØ¥Ø±Ø³Ø§Ù ÙÙØ§ Ø§ÙØ¹ÙاÙ
Ù Ø§ÙØ£ØªÙØ© arg1...argN ٠إرسا٠ÙÙØ§ جسÙ
Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ°Ù ÙØØªÙ٠عÙÙ Ù
ا ÙØ±Ùد ÙØ¹Ù٠بداخÙÙØ§ functionBody.
Ø¯Ø¹ÙØ§ ÙØ¨Ø³Ø· Ø§ÙØ£Ù ر Ø¨Ù Ø«Ø§Ù ÙØ¯Ø§ÙØ© ØªØØªØ§Ø¬ Ø¥Ù٠عا٠ÙÙÙ:
let sum = new Function('a', 'b', 'return a + b');
alert(sum(1, 2)); // 3
ÙØ°Ø§ ٠ثا٠أخر ÙØ¯Ø§ÙØ© ÙØ§ ØªØØªØ§Ø¬ Ø¥ÙÙ Ø¹ÙØ§Ù Ù ÙÙØ· ÙØ±Ø³Ù ÙÙØ§ Ø¬Ø³Ù Ø§ÙØ¯Ø§ÙØ©:
let sayHi = new Function('alert("Hello")');
sayHi(); // Hello
اÙÙØ±Ù Ø§ÙØ£Ø³Ø§Ø³Ù بÙÙ ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ© ÙØ¨Ø§ÙÙ Ø§ÙØ·Ø±Ù Ø§ÙØªÙ تبÙÙ Ø§ÙØ¯Ø§ÙØ© ÙÙ Ø£Ù Ø§ÙØ¯Ø§ÙØ© ØªÙØ¨ÙÙ Ù
Ù ÙØµ string ÙÙ
ÙÙ Ø£Ù ÙØ±Ø³ÙÙ ÙÙØ¯Ø§ÙØ© Ø£Ø«ÙØ§Ø¡ تشغÙÙ Ø§ÙØ¨Ø±ÙاÙ
ج.
ÙÙ Ø§ÙØ·Ø±Ù Ø§ÙØ³Ø§Ø¨ÙØ© ÙØ§Ùت ØªØªØ·ÙØ¨ Ù ÙÙØ§ Ù٠بر٠جÙ٠أ٠ÙÙØªØ¨ Ø§ÙØ¯Ø§ÙØ© ع٠طرÙ٠اÙÙÙØ¯.
ÙÙÙ ÙÙÙ
Ø© Ø¯Ø§ÙØ© Ø¬Ø¯ÙØ¯Ø© new Function ØªØªÙØ ÙÙØ§ تØÙÙ٠اÙÙØµ string Ø¥ÙÙ Ø¯Ø§ÙØ©
Ù Ø«ÙØ§ ÙÙ ÙÙÙØ§ Ø£Ù ÙØ³ØªÙÙ Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¬Ø¯Ùدة Ù Ù Ø§ÙØ®Ø§Ø¯Ù Ø§ÙØ¨Ø¹Ùد ث٠ÙÙÙØ°Ùا:
let str = ... receive the code from a server dynamically ...
let func = new Function(str);
func();
ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ© تستخد٠ÙÙ ØØ§Ùات خاصة Ø¬Ø¯Ø§Ù Ù Ø«ÙØ§Ù Ø¹ÙØ¯Ù ا ÙØªØ³ÙÙ ÙÙØ¯ Ù Ù Ø§ÙØ®Ø§Ø¯Ù , Ø£Ù ÙØªØ¬Ù ÙØ¹ Ø§ÙØ¯Ø§ÙØ© بطرÙÙØ© تÙÙØ§Ø¦ÙØ© ٠٠اÙÙØ§Ùب ÙÙØ°Ø§ ÙØ³ØªØ®Ø¯Ù Ù٠تطبÙÙØ§Øª اÙÙÙØ¨ اÙÙ Ø¹ÙØ¯Ø©.
Closure
عادة, ØªØªØ°ÙØ± Ø§ÙØ¯Ø§ÙØ© دائÙ
ا٠Ù
٠أÙ٠تÙ
ت Ù
ÙØ§Ø¯Ø§ØªÙا ÙÙ Ø®Ø§ØµÙØ© خاصة Ø¨Ø§ÙØ¯Ø§ÙØ© تسÙ
Ù [[Environment]]. ÙÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© ØªØ´ÙØ± Ø¥ÙÙ ØØ³Ø¯ ÙØºÙÙ Lexical Environment تدÙÙØ§ Ø£Ù٠تÙ
Ø¨ÙØ§Ø¡ ÙØ°Ù Ø§ÙØ¯Ø§ÙØ© ( تÙ
ت ØªØºØ·ÙØ© ÙØ°Ù Ø§ÙØ¬Ø²Ø¦ÙØ© ÙÙ ÙØ°Ø§ اÙÙØµÙ ÙØ·Ø§Ù اÙÙ
ØªØºÙØ±Ø§ØªØ Ø§ÙØ¥ØºÙا٠)
ÙÙÙ Ø¹ÙØ¯Ù
ا Ø¹ÙØ¯Ù
ا ÙØ³ØªØ®Ø¯Ù
طرÙÙØ© Ø¯Ø§ÙØ© Ø¬Ø¯ÙØ¯Ø© new Function, ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© [[Environment]] ÙÙ
تعد ØªØ´ÙØ± Ø¥ÙÙ Ø§ÙØØ³Ø¯ اÙÙØºÙÙ Lexical Environment ÙÙ
ا Ø°ÙØ±Ùا ÙÙ Ø§ÙØ£Ø¹ÙÙ ÙØ¥ÙÙ
ا ØªØ´ÙØ± Ø§ÙØØ¯Ø³ Ø§ÙØ´Ø§Ù
٠إÙÙ Global Lexical Enviroment.
function getFunc() {
let value = "test";
let func = new Function('alert(value)');
return func;
}
getFunc()(); // error: value is not defined
ÙØ§Ø±Ù Ø§ÙØ£Ù بÙÙÙ ÙØ¨ÙÙ Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØªÙÙÙØ¯ÙØ©:
function getFunc() {
let value = "test";
let func = function() { alert(value); };
return func;
}
getFunc()(); // "test", from the Lexical Environment of getFunc
ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© اÙÙ
ÙØ¬Ùدة ÙÙ Ø¯Ø§ÙØ© Ø¬Ø¯ÙØ¯Ø© new Function ØªØ¨Ø¯Ù ØºØ±ÙØ¨Ø©, ÙÙÙÙØ§ Ø¹ÙØ¯ Ø§ÙØªØ·Ø¨ÙÙ Ù
ÙÙØ¯Ø© جداÙ.
تخÙ٠أÙÙØ§ ÙØ±Ùد Ø¨ÙØ§Ø¡ Ø¯Ø§ÙØ© Ù
Ù ÙØµ string. اÙÙÙØ¯ Ø§ÙØ®Ø§Øµ Ø¨Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ£Ù ØºÙØ± Ù
عرÙÙ Ù٠اÙÙÙØª Ø§ÙØ°Ù ØªÙØªØ¨ ÙÙÙ Ø§ÙØ¨Ø±ÙاÙ
ج ( ÙÙØ°Ø§ Ø§ÙØ³Ø¨Ø¨ ÙØ§ ÙØ³ØªØ®Ø¯Ù
Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØªÙÙÙØ¯ÙØ© ÙÙØ¯Ø§ÙØ© ) ÙÙ٠سÙÙÙÙ Ù
عرÙÙ Ø£Ø«ÙØ§Ø¡ Ø§ÙØªØ´ØºÙÙ. ÙÙ
٠اÙÙ
Ù
ÙÙ Ø£Ù ÙØ³ØªÙÙ
ÙÙØ¯ Ø§ÙØ¯Ø§ÙØ© Ù
Ù Ø§ÙØ®Ø§Ø¯Ù
Ø§ÙØ¨Ø¹Ùد Ø£Ù Ù
Ù Ù
صدر أخر.
Ø¯Ø§ÙØªÙا Ø§ÙØ¬Ø¯Ùدة ØªØØªØ§Ø¬ Ø¥ÙÙ Ø§ÙØªÙاع٠٠ع اÙÙÙØ¯ Ø§ÙØ£Ø³Ø§Ø³Ù.
ÙÙ٠٠اذا Ø³ÙØØ¯Ø« إذا استطاعت Ø§ÙØ¯Ø§ÙØ© اÙÙØµÙ٠إÙ٠اÙÙ ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙÙ٠تÙ٠ت٠تÙÙ Ø§ÙØ®Ø§ØµÙØ© اÙ٠ذÙÙØ±Ø© ÙÙ Ø§ÙØ£Ø¹ÙÙØ
اÙÙ Ø´ÙÙØ© ÙÙ Ø£Ù ÙØ¨Ù Ø£Ù ÙØªÙ ÙØ´Ø± Ù Ø´Ø±ÙØ¹ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت Ø§ÙØ®Ø§Øµ ب٠ÙÙØ¥Ùتاج. ÙØªÙ ضغط٠ع٠طرÙ٠إستخدا٠شئ ÙØ³Ù Ù â minifier â ÙØ¹ØªØ¨Ø± ÙØ°Ø§ Ø§ÙØ¨Ø±Ùا٠ج خاص بتÙÙÙØµ ØØ¬Ù اÙÙÙØ¯ Ø§ÙØ®Ø§Øµ ب٠ع٠طرÙÙ Ù Ø³Ø Ø§ÙØ²Ùادات Ù Ø«Ù Ø§ÙØªØ¹ÙÙÙØ§Øª ٠اÙÙ Ø³Ø§ÙØ§Øª Ù Ø§ÙØ£Ù٠٠٠ذÙ٠أÙÙ ÙØºÙر أس٠اء اÙÙ ØªØºÙØ±Ø§Øª اÙÙ ØÙÙØ© Ø§ÙØ·ÙÙÙØ© Ø¥Ù٠أس٠اء Ù ØªØºÙØ±Ø§Øª Ø£ÙØµØ±.
Ù
Ø«ÙØ§Ù Ø§Ø°Ø§Ù ÙØ§Ùت Ø¯Ø§ÙØ© ØªØØªÙ٠عÙÙ let userName اÙÙ â minifier â ÙØÙÙÙØ§ Ø¥ÙÙ let a (أ٠أ٠شئ أخر إذا ÙØ§Ù ÙØ°Ø§ Ø§ÙØ£Ø³Ù
ØºÙØ± Ù
تاØ), ÙÙÙÙÙ
Ø¨ÙØ°Ø§ ÙÙ ÙÙ Ù
ÙØ§Ù تÙ
Ø°ÙØ± ÙÙÙ ÙØ°Ø§ اÙÙ
ØªØºÙØ± ÙÙ٠شئ Ø¢Ù
Ù ÙØ£Ù اÙÙ
ØªØºÙØ± ÙØ¹ØªØ¨Ø± Ù
ØÙÙ Ø¯Ø§Ø®Ù Ø§ÙØ¯Ø§ÙØ© ÙÙØ§ ÙØ³ØªØ·Ùع أ٠شئ خارج Ø§ÙØ¯Ø§ÙØ© اÙÙØµÙ٠إÙÙÙ, ÙØ¯Ø§Ø®Ù Ø§ÙØ¯Ø§ÙØ© ÙØºÙر اÙÙ â minifier â ÙÙ Ù
رة Ø°ÙØ± ÙÙÙØ§ Ø§ÙØ£Ø³Ù
. minifier ÙØ¹ØªØ¨Ø± ذÙÙ ÙØ£ÙÙ ÙØÙ٠ترÙÙØ¨ اÙÙÙØ¯ ÙÙÙ ÙØ§Ùعط٠شئ ÙÙÙØ³ ÙÙØ· اÙÙÙØ§Ù
Ø¨Ø§ÙØªØ¨Ø¯ÙÙ.
For instance, if a function has let userName, minifier replaces it with let a (or another letter if this one is occupied), and does it everywhere. Thatâs usually a safe thing to do, because the variable is local, nothing outside the function can access it. And inside the function, minifier replaces every mention of it. Minifiers are smart, they analyze the code structure, so they donât break anything. Theyâre not just a dumb find-and-replace.
إذا استطاعت Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¬Ø¯Ùدة new Function اÙÙØµÙÙ ÙÙÙ
تغبرات Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ستÙÙÙ ÙØ°Ù Ù
Ø´ÙÙØ© ÙØ¨Ùر ÙØ¯ ØªØ¹Ø·Ù Ø§ÙØ¨Ø±ÙاÙ
ج ÙÙØ°Ø§ Ø§ÙØ³Ø¨Ø¨ Ù٠زÙÙØ¯Øª Ø¨Ø®Ø§ØµÙØ© عدÙ
اÙÙØµÙ٠إÙ٠اÙÙ
ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© Ø§ÙØ°Ù Ø°ÙØ±ÙØ§Ù Ø¨Ø§ÙØ£Ø¹ÙÙ
إذا Ø£Ø±Ø¯ÙØ§ Ø§ÙØ¯Ø§ÙØ© أ٠تص٠إÙÙ Ù ØªØºÙØ± خارج٠٠عÙ٠عÙÙÙØ§ Ø£Ù ÙØ±Ø³ÙÙ ÙØ¹Ø§Ù Ù ÙÙØ§,
اÙÙ ÙØ®Øµ
طرÙÙØ© ترÙÙØ¨ Ø§ÙØ¬Ù ÙØ©:
let func = new Function([arg1, arg2, ...argN], functionBody);
ÙØ£Ø³Ø¨Ø§Ø¨ ØªØ§Ø±ÙØ®ÙØ©, Ø§ÙØ¹Ùا٠٠ÙÙ ÙÙ Ø£Ù ÙØ±Ø³ÙÙØ§ عÙÙ Ø´ÙÙ ÙØ§Ø¦Ù Ø© Ù ÙØµÙÙØ© Ø¨ÙØ§ØµÙات.
ÙØ§ØØ¸ Ø£Ù Ø§ÙØ«Ùاث ØªÙØ¶ÙØØ§Øª اÙÙØ§Ø¯Ø© ÙÙÙÙ ÙØÙ ÙÙÙ ÙÙØ³ اÙ٠عÙÙ:
new Function('a', 'b', 'return a + b'); // basic syntax
new Function('a,b', 'return a + b'); // comma-separated
new Function('a , b', 'return a + b'); // comma-separated with spaces
Ø§ÙØ¯ÙØ§Ù Ø§ÙØªÙ تÙ
Ø¨ÙØ§Ø¡Ùا ع٠طرÙÙ new Function, تÙ
تÙÙ Ø®Ø§ØµÙØ© [[Environment]] Ø§ÙØªÙ ØªØ´ÙØ± Ø¥ÙÙ Ø§ÙØØ¯Ø³ Ø§ÙØ´Ø§Ù
Ù âglobal Lexical Environmentâ, ÙÙÙØ³ Ø§ÙØØ¯Ø³ Ø§ÙØ®Ø§Ø±Ø¬Ù. ÙÙØ°ÙÙ ÙØ°Ù Ø§ÙØ¯Ø§ÙØ© ÙØ§ØªØ³ØªØ·Ùع اÙÙØµÙÙ ÙÙÙ
ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙÙÙÙ ÙØ°Ø§ شئ Ø¬ÙØ¯ ÙØ§ÙÙ ÙÙÙØ§ ØØ¯ÙØ«Ù Ø³ØªØØ¯Ø« أخطاء ÙØ«Ùرة Ø¬Ø¯Ø§Ù Ø¹ÙØ¯ تÙÙÙØµ اÙÙÙØ¯. ÙØ¹Ùد Ø§ÙØØ§Ø¬Ø© Ø¥ÙÙ Ù
ØªØºÙØ± Ø®Ø§Ø±Ø¬Ù ÙØ±Ø³Ù٠عÙÙ Ø´Ù٠عاÙ
Ù ÙÙØ¯Ø§ÙØ© ذÙÙ ÙÙ
ÙØ¹ Ù٠اÙÙ
شاÙÙ Ø§ÙØªÙ Ø°ÙØ±ÙØ§ÙØ§ ÙÙ Ø§ÙØ£Ø¹ÙÙ.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)