Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ÙÙ ÙØºØ© Ù ÙØ¬ÙØ© ÙØÙ Ø§ÙØ¯ÙاÙ. ØªÙ ÙØÙØ§ اÙÙØºØ© ØØ±ÙØ© ÙØ¨ÙØ±Ø©Ø ØÙØ« ÙÙ ÙÙ Ø¥ÙØ´Ø§Ø¡ Ø¯Ø§ÙØ© Ù٠أ٠ÙÙØªØ ÙØ¥Ø±Ø³Ø§ÙÙØ§ ÙÙØ³ÙØ· ÙØ¯Ø§ÙØ© أخر٠ÙÙ Ù Ø«Ù Ø§Ø³ØªØ¯Ø¹Ø§Ø¦ÙØ§ Ù Ù Ù ÙØ§Ù ٠ختÙÙ Ù٠اÙÙÙØ¯ ÙØ§ØÙÙØ§.
ÙØÙ Ø¨Ø§ÙÙØ¹Ù ÙØ¹ÙÙ Ø£Ù Ø§ÙØ¯Ø§ÙØ© ÙÙ ÙÙÙØ§ اÙÙØµÙ٠إÙ٠اÙÙ ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© Ù ÙÙØ§ (âØ§ÙÙ ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ©â).
ÙÙÙ٠٠اذا ÙØØ¯Ø« إذا ØªØºÙØ±Øª اÙÙ ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© بعد Ø¥ÙØ´Ø§Ø¡ Ø§ÙØ¯Ø§ÙØ©Ø ÙÙ Ø³ØªØØµÙ Ø§ÙØ¯Ø§ÙØ© عÙ٠اÙÙÙÙ Ø§ÙØ£ØØ¯Ø« أ٠اÙÙÙ٠اÙÙØ¯ÙÙ Ø©Ø
Ù٠اذا إذا ØªÙ ØªÙ Ø±ÙØ± Ø¯Ø§ÙØ© Ù٠عÙÙ Ø© ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¤Ùا Ù Ù Ù ÙØ§Ù آخر Ù٠اÙÙÙØ¯Ø ÙÙ Ø³ØªØØµÙ Ø§ÙØ¯Ø§ÙØ© عÙÙ ÙØµÙ٠إÙ٠اÙÙ ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© Ù٠اÙÙ ÙØ§Ù Ø§ÙØ¬Ø¯ÙدØ
Ø¯Ø¹ÙØ§ ÙÙØ³Ø¹ Ù Ø¹Ø±ÙØªÙا ÙÙÙÙ ÙØ°Ù Ø§ÙØ³ÙÙØ§Ø±ÙÙÙØ§Øª ÙØ§ÙسÙÙØ§Ø±ÙÙÙØ§Øª Ø§ÙØ£Ùثر تعÙÙØ¯Ùا.
Ø³ÙØªØØ¯Ø« ع٠اÙÙ
ÙØªØºÙرات let/const ÙÙØ§
let/const ÙÙØ§ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت, ÙÙØ§Ù Ø«ÙØ§Ø« Ø·ÙØ±Ù ÙØªØ¹Ø±ÙÙ Ù
ØªØºÙØ±: let, const (Ø§ÙØ£ØØ¯Ø«), Ù var (Ø§ÙØ£ÙدÙ
)
- ÙÙ ÙØ°Ø§ اÙÙ
ÙØ§Ù Ø³ÙØ³ØªØ®Ø¯Ù
Ù
ÙØªØºÙرات
letÙÙ Ø§ÙØ£Ù Ø«ÙØ©. - اÙÙ
ÙØªØºÙرات, اÙÙ
ÙØ¹Ø±ÙÙØ© بإستخداÙ
const, تتصر٠بÙÙØ³ Ø§ÙØ·Ø±ÙÙØ© ÙØ°ÙÙ ÙØ°Ù اÙÙ ÙØ§ÙØ© عÙconstØ£ÙØ¶Ø§Ù. varاÙÙØ¯ÙÙ Ø© ÙÙØ§ بعض Ø§ÙØ¥Ø®ØªÙØ§ÙØ§Øª اÙÙ ÙØÙØ¸Ø©, Ø³ÙØªÙ ØªØºØ·ÙØªÙا ÙÙ ÙØ°Ø§ اÙÙ ÙØ§Ù Ø¥ÙØ§Ø¯Ø© «var» اÙÙØ¯ÙÙ Ø©.
ÙÙØªÙ اÙÙÙØ¯
إذا تÙ
تعرÙÙ Ù
ÙØªØºÙر Ø¯Ø§Ø®Ù ÙØªÙØ© Ù
٠اÙÙÙØ¯ {...}, ÙØ°Ø§ اÙÙ
ÙØªØºÙر ÙÙ
ÙÙ Ø±Ø¤ÙØªÙ ÙÙØ· Ø¯Ø§Ø®Ù ÙØ°Ù اÙÙØªÙØ©.
Ù Ø«ÙØ§Ù:
{
// تعرÙÙ Ù
ÙØªØºÙر Ù
ØÙÙ ÙØ§ ÙÙ
Ù٠أ٠تتÙ
Ø±Ø¤ÙØªÙ ÙÙ Ø§ÙØ®Ø§Ø±Ø¬
let message = "Hello"; // Ù
رئ٠ÙÙØ· Ø¯Ø§Ø®Ù ÙØ°Ù اÙÙØªÙØ©
alert(message); // Hello
}
alert(message); // خطأ: message ØºÙØ± Ù
ÙØ¹Ø±ÙÙØ©
ÙÙ ÙÙ Ø£Ù ÙØ³ØªØ®Ø¯Ù ÙØ°Ø§ Ù٠عز٠جزء ٠٠اÙÙÙØ¯ ÙÙÙÙØ§Ù ب٠ÙÙ Ø© خاصة٠ب٠بإستخدا٠اÙÙ ÙØªØºÙرات Ø§ÙØªÙ ØªÙØªÙ ٠إÙÙÙ ÙÙØ·:
{
// Ø¥Ø¸ÙØ§Ø± Ø±Ø³Ø§ÙØ©
let message = 'Hello';
alert(message);
}
{
// Ø¥Ø¸ÙØ§Ø± Ø±Ø³Ø§ÙØ© أخرÙ
let message = 'Goodbye';
alert(message);
}
سÙÙÙÙ ÙÙØ§Ù خطاء بدÙÙ Ø§ÙØ£ÙÙØ§Ø³
ÙØ±Ø¬Ù Ù
ÙØ§ØØ¸Ø©, بدÙÙ ÙØµÙ اÙÙÙØªÙ سÙÙÙÙ ÙÙØ§Ù خطأ Ø¹ÙØ¯ إستخداÙ
let Ù
ع إسÙ
Ù
ÙØªØºÙر Ù
ÙØ¬Ùد باÙÙØ¹Ù::
// Ø¥Ø¸ÙØ§Ø± Ø±Ø³Ø§ÙØ©
let message = "Hello";
alert(message);
// Ø¥Ø¸ÙØ§Ø± Ø±Ø³Ø§ÙØ© أخرÙ
let message = "Goodbye"; // خطأ: Ù
ÙØªØºÙر Ù
ÙØ¬Ùد باÙÙØ¹Ù
alert(message);
ÙÙÙÙ Ù
Ù if, for, while ÙÙÙØ°Ø§ Ù٠اÙÙ
ÙØªØºÙرات اÙÙ
ÙØ¹Ø±ÙÙØ© بداخÙÙØ§ {...} ÙÙ
ÙÙ Ø±Ø¤ÙØªÙا ÙÙØ· Ø¯Ø§Ø®Ù Ø§ÙØ£ÙÙØ§Ø³:
if (true) {
let phrase = 'Hello!';
alert(phrase); // Hello!
}
alert(phrase); // خطأ, Ù
ÙØªØºÙر ØºÙØ± Ù
ÙØ¬Ùد!
ÙÙØ§, بعد Ø¥ÙØªÙاء if, alert Ù٠تر٠phrase ÙØ°ÙÙ ÙÙØ¬Ø¯ خطأ
ÙØ°Ø§ عظÙÙ
, ÙØ°Ø§ ÙØ³Ù
Ø ÙÙØ§ Ø¨Ø¥ÙØ´Ø§Ø¡ Ù
ØªØºÙØ± Ù
ØÙÙ ÙÙÙØªÙØ© خاص ÙÙØ· Ø¨ÙØ±Ø¹ if.
ÙÙØ³ Ø§ÙØ´Ø¦ Ø¹ÙØ¯ اÙÙÙØ§Ù
ب٠for ٠while:
for (let i = 0; i < 3; i++) {
// اÙÙ
ØªØºÙØ± i ÙØ§ ÙÙ
ÙÙ Ø±Ø¤ÙØªÙ Ø¥ÙØ§ داخ٠اÙÙ for
alert(i); // 0, then 1, then 2
}
alert(i); // خطأ, Ù
ÙØªØºÙر ØºÙØ± Ù
ÙØ¬Ùد!
ÙØ§ØØ¸ Ø£Ù Ø¨ØµØ±ÙØ§Ù let i تعتبر خارج Ø§ÙØ£ÙÙØ§Ø³ {...}. ÙÙÙ for تعتبر ØØ§ÙØ© Ø¨ÙØ§Ø¡ خاصة ÙØ£Ù ÙÙ Ù
ا تÙ
تعرÙÙ٠بداخÙÙØ§ ÙØ¹ØªØ¨Ø± Ø¯Ø§Ø®Ù Ø§ÙØ£ÙÙØ§Ø³.
Ø§ÙØ¯Ùا٠اÙÙ ØªØ¯Ø§Ø®ÙØ©
ØªØ³Ù Ù Ø§ÙØ¯Ø§ÙØ© Ù ØªØ¯Ø§Ø®ÙØ© Ø¹ÙØ¯Ù ا ÙØªÙ Ø¥ÙØ´Ø§ØªÙا Ø¯Ø§Ø®Ù Ø¯Ø§ÙØ© أخرÙ.
ÙØ°Ø§ سÙ٠اÙÙÙØ§Ù ب٠ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت.
ÙÙ ÙÙ Ø¥Ø³ØªØ®Ø¯Ø§Ù ÙØ°Ø§ ÙÙ ØªÙØ¸Ù٠اÙÙÙØ¯ Ø§ÙØ®Ø§Øµ Ø¨ÙØ§, Ù Ø«Ù ÙØ°Ø§:
function sayHiBye(firstName, lastName) {
// Ø¯Ø§ÙØ© Ù
ØªØ¯Ø§Ø®ÙØ© ÙÙÙ
ساعدة
function getFullName() {
return firstName + ' ' + lastName;
}
alert('Hello, ' + getFullName());
alert('Bye, ' + getFullName());
}
ÙÙØ§ Ø§ÙØ¯Ø§ÙØ© اÙÙ
ØªØ¯Ø§Ø®ÙØ© getFullName() صÙÙØ¹Øª ÙÙØ¥ÙÙØ§Ø¹. ÙØ°Ù Ø§ÙØ¯Ø§ÙØ© ÙÙ
ÙÙÙØ§ اÙÙØµÙÙ ÙÙÙ
ÙØªØºÙرات Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙØªÙرجع Ø§ÙØ¥Ø³Ù
باÙÙØ§Ù
Ù. تعتبر Ø§ÙØ¯Ùا٠اÙÙ
ØªØ¯Ø§Ø®ÙØ© Ø¥ÙÙ ØØ¯ Ù
ا شائعة Ø§ÙØ¥Ø³ØªØ®Ø¯Ø§Ù
ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت.
ÙØ§ÙÙ Ø«ÙØ± ÙÙØ¥ÙØªÙ Ø§Ù Ø§ÙØ¶Ø§Ù Ø£Ù Ø§ÙØ¯Ø§ÙØ© اÙÙ ØªØ¯Ø§Ø®ÙØ© ÙÙ ÙÙ Ø¥Ø±Ø¬Ø§Ø¹ÙØ§! إ٠ا عÙÙ Ø´ÙÙ Ø®Ø§ØµÙØ© ÙÙØ§Ø¦Ù Ø£Ù ÙØªÙجة إذا ÙØ§Ùت تÙÙ٠ببعض Ø§ÙØ¹Ù ÙÙØ§Øª. Ø£ÙØ¶Ø§ ÙÙ ÙÙ Ø¥Ø³ØªØ®Ø¯Ø§Ù ÙØ§ ÙÙ Ø£Ù Ù ÙØ§Ù أخر ÙÙØ³ ٠٠اÙÙ Ù٠أÙÙ ÙÙÙÙØ§ Ù Ø§Ø²Ø§ÙØª ØªØ³ØªØ·ÙØ¹ اÙÙØµÙÙ ÙÙÙØ³ اÙÙ ÙØªØºÙرات Ø§ÙØ®Ø§Ø±Ø¬ÙØ©.
ÙÙ Ø§ÙØ£Ø³ÙÙ, makeCounter صÙÙØ¹Øª âcounterâ Ù Ø¯Ø§ÙØ© Ø£Ø®Ø±Ù ØªÙØ±Ø¬Ø¹ Ø§ÙØ±ÙÙ
Ø§ÙØªØ§ÙÙ Ù
ع ÙÙ ÙØ¯Ø§Ø¡:
function makeCounter() {
let count = 0;
return function () {
return count++;
};
}
let counter = makeCounter();
alert(counter()); // 0
alert(counter()); // 1
alert(counter()); // 2
Ø¨Ø§ÙØ±ØºÙ Ù Ù Ø£Ù ÙØ°Ø§ اÙÙ Ø«Ø§Ù Ø¨Ø³ÙØ· Ø¬Ø¯Ø§Ù Ø¥ÙØ§ Ø£ÙÙ ÙØ³ØªØ®Ø¯Ù ÙÙ Ø§ÙØÙØ§Ø© Ø§ÙØ¹Ù ÙÙØ© Ù٠ثاÙ: Ù ÙÙÙØ¯ رÙÙ Ø¹Ø´ÙØ§Ø¦Ù ÙØµÙÙØ¹ ÙÙÙ Ø© Ø¹Ø´ÙØ§Ø¦ÙØ© ÙÙØªØ¬Ø§Ø±Ø¨ Ø§ÙØ§ÙتÙ٠اتÙÙÙØ©.
ÙÙÙ ÙØ¹Ù Ù ÙØ°Ø§Ø Ù٠إذا ØµÙØ¹Ùا عدادات ÙØ«Ùر سÙÙÙÙÙØ§ ØºÙØ± ٠عت٠دÙ٠عÙ٠بعضÙÙ Ø Ù Ø§Ø°Ø§ ÙØØ¯Ø« ٠ع اÙÙ ØªØºÙØ±Ø§Øª ÙÙØ§Ø
ÙÙÙ ÙØ°Ù Ø§ÙØ£Ø´Ùاء ÙØ¹Ø¯ عظÙ٠ا٠ÙÙ٠عÙÙ٠ات Ø§ÙØ´Ø§Ù ÙØ© ÙØ¬Ø§Ùا Ø³ÙØ±Ùبت ÙÙ ÙÙØ¯ جدا٠ÙÙ ØØ§ÙØ© Ø§ÙØ³ÙÙØ§Ø±ÙÙÙØ§Øª اÙÙ Ø¹ÙØ¯Ø©. ÙØ°ÙÙ ÙÙØ§ ÙØªØ¹Ù Ù Ø£ÙØ«Ø± ÙÙ Ø£Ù ÙØ± Ø£ÙØ«Ø± ØµØ¹ÙØ¨Ø© ÙØªØØªØ§Ø¬ Ø¥Ù٠ترÙÙØ².
Ø§ÙØ¨Ùئات اÙÙ Ø¹Ø¬Ù ÙØ©
ÙÙ Ø§ÙØ´Ø±Ø اÙÙ ØªØ¹Ù Ù Ø§ÙØ³Ø§Ø¨Ù ÙØ§Ù Ø´Ø±Ø Ù Ø¹ ØªØ¬ÙØ¨ Ø§ÙØ¯Ø®ÙÙ ÙÙ ØªÙØ§ØµÙ٠ذات ٠ستÙÙ Ù ÙØ®Ùض ٠٠اÙÙØºØ© ÙÙ٠أ٠ÙÙ٠دÙÙ ÙØ°Ù Ø§ÙØªÙاصÙÙ ÙØ¹ØªØ¨Ø± ÙØ§Ùص, ÙØ°ÙÙ ÙÙ٠٠ستعد ÙÙØ£ÙÙØ§ Ø³ÙØªØ¹Ù Ù Ù٠٠ستÙÙØ§Øª Ù ÙØ®Ùضة ٠٠اÙÙØºØ©
ÙÙØ¥ÙضاØ, سÙÙÙØ³Ù Ø§ÙØ´Ø±Ø Ø¥Ù٠عدة Ø®Ø·ÙØ§Øª
Ø§ÙØ®Ø·ÙØ© Ø§ÙØ£ÙÙÙ: اÙÙ ÙØªØºÙرات
ÙÙ ÙØºØ© Ø¬Ø§ÙØ§ Ø³ÙØ±ÙØ¨ØªØ ØªÙ
ÙÙ ÙÙÙ Ø¯Ø§ÙØ© عاÙ
ÙØ© Ø£Ù ÙØªÙØ© Ø´ÙØ±Ø§Øª â{...}â Ø£Ù ØØªÙÙ Ø§ÙØ³Ùربت ÙÙÙÙ â ØªÙ
ÙÙ ÙØ§Ø¦ÙÙØ§ داخÙÙÙØ§ Ù
Ø±ØªØ¨Ø·ÙØ§ Ø¨ÙØ§ (ÙÙÙÙÙÙ Ù
Ø®ÙÙ) ÙÙØ¯Ø¹Ù Ø¨Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© Lexical Environment.
تتأÙÙÙ ÙØ§Ø¦Ùات Ø§ÙØ¨Ùئات اÙÙ ÙØ¹Ø¬Ù ÙØ© ÙØ°Ù Ù Ù ÙØ³Ù ÙÙ:
- سجÙÙ Ù
ÙØ¹Ø¬Ù
Ù Environment Record: ÙÙÙ ÙØ§Ø¦Ù ÙØ®Ø²ÙÙ ÙØ§ÙØ© اÙÙ
ØªØºÙØ±Ø§Øª اÙÙ
ØÙÙØ© عÙ٠أÙÙÙØ§ Ø®Ø§ØµÙØ§Øª ÙÙ (ÙÙ
ا ÙØºÙØ±ÙØ§ Ù
Ù Ù
عÙÙÙ
ات Ù
ث٠ÙÙÙ
Ø©
âthisâ). - إشارة Ø¥ÙÙ Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© â Ø£Ù اÙ٠رتبطة ٠ع اÙÙÙØ¯ Ø§ÙØ®Ø§Ø±Ø¬Ù ÙÙÙØ§Ø¦Ù اÙÙ ÙØ¹Ø¬Ù Ù.
ÙÙØ³ «اÙÙ
ØªØºÙØ±Â» Ø¥ÙØ§ Ø®Ø§ØµÙØ© ÙØ¥ØØ¯Ù اÙÙØ§Ø¦Ùات Ø§ÙØ¯Ø§Ø®ÙÙØ© Ø§ÙØ®Ø§ØµØ©: Ø§ÙØ³Ø¬Ù اÙÙ
ÙØ¹Ø¬Ù
Ù âEnvironment Recordâ. ÙØÙÙ ÙØ¹Ù٠«بأخذ اÙÙ
ØªØºÙØ± أ٠تغÙÙØ± ÙÙÙ
تÙ» ÙÙØ¹Ù٠«بأخذ Ø®Ø§ØµÙØ© ذÙ٠اÙÙØ§Ø¦Ù أ٠تغÙÙØ± ÙÙÙ
ØªÙØ§Â».
Ø¥ÙÙÙ ÙØ°Ù اÙÙÙØ¯ Ø§ÙØ¨Ø³ÙØ· ٠ثاÙÙØ§ (ÙÙÙØ§ Ø¨ÙØ¦Ø© Ù ÙØ¹Ø¬Ù ÙØ© ÙØ§ØØ¯Ø© ÙÙØ·):
ÙØ°Ø§ ٠ا ÙØ³Ù ÙÙÙ Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø§ÙØ¹Ù ÙÙ ÙØ© (global) ÙÙ٠٠رتبطة Ø¨Ø§ÙØ³Ùربت ÙØ§Ù ÙÙÙØ§.
ÙØ¹Ù٠باÙÙ
ستطÙÙ (ÙÙ Ø§ÙØµÙرة Ø£Ø¹ÙØ§Ù) Ø§ÙØ³Ø¬Ù اÙÙ
ÙØ¹Ø¬Ù
Ù (Ø£Ù Ù
خز٠اÙÙ
ØªØºÙØ±Ø§Øª)Ø ÙÙØ¹ÙÙ Ø¨Ø§ÙØ³ÙÙ
Ø§ÙØ¥Ø´Ø§Ø±Ø© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙÙ. ÙØ·Ø§ÙÙ
ا Ø£ÙÙ Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© Ø§ÙØ¹Ù
ÙÙ
ÙØ© ÙÙØ³ ÙÙØ§ إشارة Ø®Ø§Ø±Ø¬ÙØ©Ø ÙØ°Ø§Ù Ø§ÙØ³ÙÙ
ÙÙØ´Ùر Ø¥ÙÙ ânullâ.
Ø¹ÙØ¯Ù ا ÙØªÙ تÙÙÙØ° اÙÙÙØ¯, ØªØªØºÙØ± Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ©.
ÙØ§Ù٠٠ثا٠أطÙ٠بÙÙÙÙ:
ÙØ±Ù Ù٠اÙ٠ستطÙÙØ§Øª عÙ٠اÙÙÙ ÙÙ ÙÙ٠تتغÙÙØ± Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø§ÙØ¹Ù ÙÙ ÙØ© Ø£Ø«ÙØ§Ø¡ تÙÙÙØ° اÙÙÙØ¯:
- Ø¹ÙØ¯Ù
ا ÙØ¨Ø¯Ø£ Ø§ÙØ³ÙØ±ÙØ¨Øª Ø¨Ø§ÙØ¹Ù
Ù, تÙÙÙ Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© Ù
Ø¬ÙØ²Ø© بÙ٠اÙÙ
ÙØªØºÙرات اÙÙ
ÙØ¹Ø±ÙØ© داخÙÙØ§.
- ÙÙ Ø§ÙØ¨Ø¯Ø§ÙØ© ÙÙÙÙÙØ§ ÙÙ ØØ§ÙØ© تسÙ
Ù ØºÙØ± Ù
ÙØ¹Ø±Ù. ÙØ°Ù Ø§ÙØØ§ÙØ© تعÙ٠أ٠اÙÙ
ØØ±Ù ÙØ¹Ø±Ù ع٠اÙÙ
ÙØªØºÙرات ÙÙÙ ÙØ§ ÙØ³ØªØ·Ùع Ø§ÙØ¥Ø´Ø§Ø±Ø© Ø¥ÙÙÙÙ
ØØªÙ ÙØªÙ
تعرÙÙÙÙ
ع٠طرÙÙ
let.
- ÙÙ Ø§ÙØ¨Ø¯Ø§ÙØ© ÙÙÙÙÙØ§ ÙÙ ØØ§ÙØ© تسÙ
Ù ØºÙØ± Ù
ÙØ¹Ø±Ù. ÙØ°Ù Ø§ÙØØ§ÙØ© تعÙ٠أ٠اÙÙ
ØØ±Ù ÙØ¹Ø±Ù ع٠اÙÙ
ÙØªØºÙرات ÙÙÙ ÙØ§ ÙØ³ØªØ·Ùع Ø§ÙØ¥Ø´Ø§Ø±Ø© Ø¥ÙÙÙÙ
ØØªÙ ÙØªÙ
تعرÙÙÙÙ
ع٠طرÙÙ
- Ø¨Ø¹Ø¯ÙØ§ ÙØ¸Ùر Ø§ÙØªØµØ±ÙØ
âlet phraseâØ ÙÙÙ ÙÙ ØªÙØ³Ùد ÙÙ٠تغÙÙØ± Ø£ÙÙ ÙÙÙ Ø©Ø ÙØ°Ø§ تخزÙÙ Ø§ÙØ¨Ùئةâundefinedâ. - ØªÙØ³Ùد ÙÙÙ
ØªØºÙØ±
âphraseâÙÙÙ Ø©. - ÙÙÙØ§ تتغÙÙØ± ÙÙÙ
Ø©
âphraseâ.
Ø¨Ø³ÙØ· ØØªÙÙ Ø§ÙØ¢ÙØ Ø£Ù ÙØ§Ø
- Ø¹ÙØ¯ بدء تشغÙÙ Ø§ÙØ¨Ø±ÙØ§Ù Ø¬Ø ØªÙ ØªÙØ¦ Ø§ÙØ¨Ùئة اÙÙØºÙÙØ© (Lexical Environment) ٠سبÙÙØ§ Ø¨Ø¬Ù ÙØ¹ اÙÙ ØªØºÙØ±Ø§Øª اÙ٠عÙÙØ©.
- ÙÙ Ø§ÙØ¨Ø¯Ø§ÙØ©Ø ØªÙÙ٠اÙÙ
ØªØºÙØ±Ø§Øª ÙÙ Ø§ÙØØ§ÙØ© âUninitializedâ. ÙØ°Ù ØØ§ÙØ© داخÙÙØ© Ø®Ø§ØµØ©Ø ÙØªØ¹Ù٠أ٠اÙÙ
ØØ±Ù ÙØ¹Ø±Ù اÙÙ
ØªØºÙØ±Ø ÙÙÙÙ ÙØ§ ÙÙ
ÙÙ Ø§ÙØ¥Ø´Ø§Ø±Ø© Ø¥ÙÙÙ ØØªÙ ÙØªÙ
تعرÙÙ٠بÙ
let. Ø¥ÙÙØ§ ØªÙØ±ÙØ¨ÙØ§ ÙÙØ³ Ø§ÙØ´ÙØ¡ Ù٠ا Ù٠أ٠اÙÙ ØªØºÙØ± ÙÙ ÙÙÙ Ù ÙØ¬ÙØ¯ÙØ§.
- Ø«Ù
ÙØ¸Ùر تعرÙÙ
let phrase. ÙØ§ ÙÙØ¬Ø¯ تعÙÙÙ ØØªÙ Ø§ÙØ¢ÙØ ÙØ°ÙÙ ÙÙÙ ØªÙØ§ ÙÙundefined. ÙÙ ÙÙÙØ§ استخدا٠اÙÙ ØªØºÙØ± Ù Ù ÙØ°Ù اÙÙÙØ·Ø© ÙØµØ§Ø¹Ø¯Ùا. - ÙØªÙ
تعÙÙÙÙ ÙÙÙ
Ø©
phrase. - ØªØªØºÙØ± ÙÙÙ
Ø©
phrase.
- اÙÙ ØªØºÙØ± ÙÙ ÙØ¹ÙÙÙØ§ Ø®Ø§ØµÙØ© ÙØ¥ØØ¯Ù اÙÙØ§Ø¦Ùات Ø§ÙØ¯Ø§Ø®ÙÙØ© Ø§ÙØ®Ø§ØµØ©Ø ÙÙØ°Ø§ اÙÙØ§Ø¦Ù ٠رتبط باÙÙØªÙØ© Ø£Ù Ø§ÙØ¯Ø§ÙØ© Ø£Ù Ø§ÙØ³Ùربت Ø§ÙØ°Ù ÙØ¬Ø±Ù تÙÙÙØ°Ù ØØ§ÙÙÙØ§.
- ØÙÙ ÙØ¹Ù ٠٠ع اÙÙ ØªØºÙØ±Ø§Øª ÙÙÙÙ Ù٠اÙÙØ§Ùع ÙØ¹Ù ٠٠ع خصائص ذÙ٠اÙÙØ§Ø¦Ù.
تعتبر Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© Ù Ù Ù ÙØ§ØµÙات اÙÙØ§Ø¦Ù: Ø¥ÙÙØ§ ØªÙØ¬Ø¯ ÙÙØ· بشÙÙ ÙØ¸Ø±Ù ÙÙØ§: Ù ÙØ§ØµÙات اÙÙØºØ© ÙÙØµÙ ÙÙÙ ØªØ¹Ù Ù Ø§ÙØ£Ù ÙØ±. ÙÙÙ ÙØ§ ÙØ³ØªØ·Ùع Ø£Ù ÙØ£ØªÙ Ø¨ÙØ°Ø§ اÙÙØ§Ø¦Ù ÙÙ ÙÙØ¯Ùا Ø§ÙØ®Ø§Øµ ÙÙØ¹Ø¯Ù عÙÙÙ.
Ù ØØ±Ùات Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت Ø£ÙØ¶Ø§Ù ÙÙ ÙÙ Ø£Ù ØªØØ³Ù ÙØ°Ø§, Ø¨Ø§ÙØªØºØ§Ø¶Ù ع٠اÙÙ ÙØªØºÙرات Ø§ÙØºÙر ٠ستخد٠ة ÙØªÙÙÙØ± اÙÙ Ø³Ø§ØØ© ÙØ¹Ù ٠خدع Ø¯Ø§Ø®ÙØ©, طاÙ٠ا ÙØ§Ù Ø§ÙØªØµØ±Ù اÙ٠رئ٠Ù٠ا ØªÙ ÙØµÙÙ.
Ø§ÙØ®Ø·ÙØ© Ø§ÙØ«Ø§ÙÙØ©: Ø§ÙØªØµØ±ÙØ Ø¨Ø§ÙØ¯ÙاÙ
Ø§ÙØ¯Ø§ÙØ© Ø£ÙØ¶Ø§Ù تعتبر ÙÙÙ Ø©, ٠ث٠اÙÙ ÙØªØºÙر.
ÙÙÙ Ø§ÙØ¥Ø®ØªÙØ§Ù Ø£Ù Ø§ÙØªØµØ±ÙØ Ø¨Ø§ÙØ¯Ø§ÙØ©
ÙÙÙ Ø§ÙØ¯Ùا٠عÙÙ Ø¹ÙØ³ Ù
ØªØºÙØ±Ø§Øª âletâØ ÙÙÙØ³Øª تÙÙÙÙØ£ تÙ
اÙ
ÙØ§ ØÙ٠تصÙÙØ§ عÙ
ÙÙØ© Ø§ÙØªÙÙÙØ°Ø ÙØ§Ø Ø¨Ù ÙØ¨Ù ذÙÙ ØÙ٠تÙÙØ´Ø£ Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ©.
ÙØÙÙ ÙØªÙÙ٠ع٠أعÙÙ Ø§ÙØ¯Ùا٠٠ستÙÙÙØ ÙÙØ¹Ù٠ذÙÙ ÙØØ¸Ø© بدء Ø§ÙØ³Ùربت.
ÙÙÙØ°Ø§ Ø§ÙØ³Ø¨Ø¨ ÙÙ ÙÙÙØ§ استدعاء Ø§ÙØ¯ÙØ§Ù Ø§ÙØªÙ ØµØ±ÙØÙØ§Ùا ØØªÙÙ ÙØ¨Ù Ø£Ù ÙØ±Ù Ø°Ø§Ù Ø§ÙØªØ¹Ø±ÙÙ.
ÙØ±Ù Ù٠اÙÙÙØ¯ Ø£Ø¯ÙØ§Ù ÙÙ٠أÙÙ Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© ØªØØªÙÙ Ø´ÙØ¦Ùا Ù
ÙØ° Ø¨Ø¯Ø§ÙØ© Ø§ÙØªÙÙÙØ° (ÙÙÙØ³Øª ÙØ§Ø±ØºØ©)Ø ÙÙ
ا ØªØØªÙÙÙ ÙÙ âsayâ Ø¥Ø° Ø£ÙÙÙØ§ ØªØµØ±ÙØ Ø¹Ù Ø¯Ø§ÙØ©. ÙØ¨Ø¹Ø¯Ùا تسجÙÙ âphraseâ Ø§ÙÙ
ÙØµØ±ÙØ Ø¨Ø§Ø³ØªØ¹Ù
ا٠âletâ:
ÙØ°Ø§ Ø§ÙØªØµØ±Ù Ù
ÙØ¬Ùد ÙÙØ· ØªØµØ§Ø±ÙØ Ø§ÙØ¯Ø§ÙØ© Function Declarations ÙÙÙØ³ ØªØ¹Ø§Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ© Function Expressions ÙØ£Ù ØªØ¹Ø§Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ© تعاÙ
Ù Ù
عاÙ
ÙØ© اÙÙ
ÙØªØºÙر ÙØ£ÙÙØ§ تخز٠ÙÙ Ù
ØªØºÙØ±. Ù
ث٠let say = function(name)....
Ø§ÙØ®Ø·ÙØ© Ø§ÙØ«Ø§Ùثة: Ø§ÙØ¨Ùئات اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ© ÙØ§ÙØ®Ø§Ø±Ø¬ÙØ©
Ø¹ÙØ¯Ù ا تبدأ Ø§ÙØ¯Ø§ÙØ© Ø¨Ø§ÙØ¹Ù Ù, ÙÙ Ø¨Ø¯Ø§ÙØ© ÙØØ¸Ø© Ù ÙØ§Ø¯Ø§ØªÙا تÙÙØ´Ø£ Ø¨ÙØ¦Ø© Ù ÙØ¹Ø¬Ù ÙØ© تÙÙØ§Ø¦ÙÙØ§ ٠ا Ø¥Ù ØªØ¹Ù Ù Ø§ÙØ¯Ø§ÙØ© ÙØªØ®Ø²Ù٠اÙÙ ØªØºÙØ±Ø§Øª اÙÙ ØÙÙØ© ÙÙ ÙØ¹Ø§Ù ÙØ§Øª ذÙÙ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡
ÙÙ
Ø«ÙÙØ§ ÙÙØ°Ø§ ØªØ¨Ø¯Ù Ø¨ÙØ¦Ø© استدعاء âsay("John")â (ÙØµÙ Ø§ÙØªÙÙÙØ° Ø§ÙØ³Ø·Ø± Ø§ÙØ°Ù عÙÙ٠سÙÙ
):
Ø¥Ø°ÙØ§â¦ ØÙÙ ÙÙÙÙ Ø¯Ø§Ø®Ù Ø§Ø³ØªØ¯Ø¹Ø§Ø¡Ù ÙØ£ØØ¯ Ø§ÙØ¯ÙØ§Ù ÙØ±Ù ÙØ¯ÙÙØ§ Ø¨ÙØ¦ØªÙÙ Ù ÙØ¹Ø¬Ù ÙØªÙÙ: Ø§ÙØ¯Ø§Ø®ÙÙØ© (Ø§ÙØ®Ø§ØµØ© باستدعاء Ø§ÙØ¯Ø§ÙØ©) ÙØ§ÙØ®Ø§Ø±Ø¬ÙØ© (Ø§ÙØ¹Ù ÙÙ ÙØ©):
- ترتبط Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ© Ù
ع عÙ
ÙÙØ© Ø§ÙØªÙÙÙØ° Ø§ÙØØ§ÙÙØ© ÙÙØ¯Ø§ÙØ©
âsayâ. ت٠ÙÙ Ø®Ø§ØµÙØ© ÙØ§ØØ¯Ø© ÙÙØ·:ânameâ(ÙØ³ÙØ· Ø§ÙØ¯Ø§ÙØ©). ÙÙØÙ Ø§Ø³ØªØ¯Ø¹ÙÙØ§âsay("John")âØ¨ÙØ°Ø§ تÙÙÙ ÙÙÙ Ø©ânameâÙÙâ"John"â. - Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙÙÙ ÙÙØ§ Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© Ø§ÙØ¹Ù
ÙÙ
ÙØ©. تÙ
ÙÙ Ù
ØªØºÙØ±
âphraseâÙØ§ÙØ¯Ø§ÙØ© Ø°Ø§ØªÙØ§.
ÙÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ© إشارة Ø¥Ù٠تÙÙ Â«Ø§ÙØ®Ø§Ø±Ø¬Ùة».
ØÙÙ ÙØ±Ùد اÙÙÙØ¯ اÙÙØµÙ٠إÙÙ Ù ØªØºÙØ± ٠٠اÙÙ ØªØºÙØ±Ø§ØªØ ÙØ¬Ø±Ù Ø§ÙØ¨ØØ« Ø£ÙÙÙØ§ ÙÙ Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ©Ø ÙØ¨Ø¹Ø¯Ùا Ø§ÙØ®Ø§Ø±Ø¬ÙØ©Ø ÙØ§ÙØ®Ø§Ø±Ø¬ÙØ© Ø£ÙØ«Ø± ÙØ£Ùثر ÙÙØ«Ø± ØØªÙ ÙØµÙ Ø§ÙØ¹Ù ÙÙ ÙØ©.
ÙÙ ÙÙ
ÙÙØ¬Ø¯ اÙÙ
ØªØºÙØ± Ù٠عÙ
ÙÙØ© Ø§ÙØ¨ØØ« تÙÙ ÙØ³ØªØ±Ù خطأ٠(Ù٠استعÙ
ÙØª اÙÙÙ
Ø· Ø§ÙØµØ§Ø±Ù
Strict Mode). ÙÙ ÙÙ
تستعÙ
Ù âuse strictâ ÙØ³ÙÙÙØ´Ø¦ Ø§ÙØ¥Ø³Ùاد Ø¥ÙÙ Ù
ØªØºÙØ± ØºÙØ± Ù
ÙØ¬Ùد (Ù
ث٠âuser = "John"â) Ù
ØªØºÙØ±Ùا عÙ
ÙÙ
ÙÙØ§ Ø¬Ø¯ÙØ¯Ùا باسÙ
âuserâ. سبب ذÙÙ ÙÙ Ø§ÙØªÙاÙÙ Ù
ع Ø§ÙØ¥ØµØ¯Ø§Ø±Ø§Øª Ø§ÙØ³Ø§Ø¨ÙØ©.
ÙÙØ±Ù ع٠ÙÙØ© Ø§ÙØ¨ØØ« تÙÙ Ù٠٠ثاÙÙØ§:
- ØÙÙ ØªØØ§ÙÙ
âalertâÙÙ Ø¯Ø§ÙØ©âsayâØ§ÙÙØµÙ٠إÙ٠اÙÙ ØªØºÙØ±ânameâØªØ¬Ø¯Ù Ù Ø¨Ø§Ø´Ø±Ø©Ù ÙÙ Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© ÙÙØ¯Ø§ÙØ©. - ÙØÙÙ ØªØØ§Ù٠اÙÙØµÙ٠إÙÙ Ù
ØªØºÙØ±
âphraseâÙÙØ§ تجد٠٠ØÙÙÙØ§Ø تتبع Ø§ÙØ¥Ø´Ø§Ø±Ø© ÙÙ Ø§ÙØ¨Ùئة اÙÙ ØÙÙØ© ÙØªØµÙ Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø®Ø§Ø±Ø¬ÙØ§Ø ÙØªØ¬Ø¯ اÙÙ ØªØºÙØ± ÙÙÙØ§.
Ø§ÙØ®Ø·ÙØ© Ø§ÙØ±Ø§Ø¨Ø¹Ø©: إعادة/إرجاع Ø¯Ø§ÙØ©
Ø¥ÙÙÙ Ù
ا ÙØ¬Ø±Ù ÙÙ Ù
ثا٠âmakeCounterâ Ø®Ø·ÙØ©Ù Ø¨Ø®Ø·ÙØ©
function makeCounter() {
let count = 0;
return function () {
return count++;
};
}
let counter = makeCounter();
تÙÙØ´Ø£ Ø¨ÙØ¦Ø© Ù
ÙØ¹Ø¬Ù
ÙØ© ÙØØ¸Ø© استدعاء âmakeCounter()â ÙØªØÙ
Ù Ù
ØªØºÙØ±Ø§ØªÙا ÙÙ
ÙØ¹Ø§Ù
ÙØ§ØªÙا.
Ø¥Ø°Ø§Ù ÙØÙ Ù٠تÙÙ Ø¨ÙØ¦ØªÙÙ Ù ÙØ¹Ø¬Ù ÙØªÙÙ, Ù٠ا ÙÙ Ù٠اÙÙ Ø«Ø§Ù Ø§ÙØ£Ø¹ÙÙ:
Ù
Ø§ÙØ°Ø§ Ø§ÙØ¥Ø®ØªÙاÙ!, Ø£Ø«ÙØ§Ø¡ تشغÙÙ makeCounter() ÙÙØ§Ù Ø¯Ø§ÙØ© ØµØºÙØ±Ø© تÙ
ØµÙØ¹Ùا بداخÙÙØ§ ØªØØªÙÙ ÙÙØ· عÙ٠سطر ÙØ§ØØ¯ return count++ ÙÙÙ
ÙÙÙ
بÙ
ÙØ§Ø¯Ø§ØªÙا ÙÙØ· ØµÙØ¹ÙØ§ÙØ§.
جÙ
ÙØ¹ Ø§ÙØ¯ÙØ§Ù ØªØªØ°ÙØ± Ø§ÙØ¨Ùئة اÙÙ
ثعجÙ
ÙØ© ØÙØ« اÙÙ
ÙØ§Ù Ø§ÙØ°Ù صÙÙØ¹Ùا ÙÙÙ. تÙÙÙØ§Ù, ÙØ§ ÙÙØ¬Ø¯ Ø³ØØ± ÙÙØ§: ÙÙ Ø¯Ø§ÙØ© ÙÙØ§ Ø®Ø§ØµÙØ© Ù
Ø®ÙÙØ© تسÙ
Ù [[Environment]], Ø§ÙØªÙ ØªØØªÙظ Ø¨Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ© ØÙØ« تÙ
ØµÙØ¹Ùا:
إذا counter.[[Environment]] ÙØ´Ùر Ø¥ÙÙ Ø§ÙØ¨Ùئة اÙÙ
عجÙ
ÙØ© {count: 0}. ÙÙØ°Ø§ ØªØªØ°ÙØ± Ø§ÙØ¯Ø§ÙØ© Ø£Ù٠تÙ
صÙÙØ¹Ùا.
[[Environment]] ÙØªÙ
ÙØ¶Ø¹ ÙØ³Ù
ت٠Ù
رة ÙØ§ØØ¯Ø© ÙÙØ· ÙÙØ§ ÙØªÙ
ØªØºÙØ±Ùا.
ÙÙØ°Ù اÙÙ
رة Ø¹ÙØ¯Ù
ا ÙØªÙ
ØµÙØ¹ Ø§ÙØ¯Ø§ÙØ©
ÙÙÙ
ا بعد Ø¹ÙØ¯Ù
ا تتÙ
Ù
ÙØ§Ø¯Ø§Ø© counter(), ØªØ¸ÙØ± Ø¨ÙØ¦Ø© Ù
ÙØ¹Ø¬Ù
ÙØ© Ø¬Ø¯ÙØ¯Ø© ÙØ§ÙØ¨ÙØ¦Ø© اÙÙ
عجÙ
ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙÙØ§ تؤخذ Ù
Ù ÙÙØ§ counter.[[Environment]]:
Ø§ÙØ¢Ù Ø¹ÙØ¯Ù
ا ÙØ¨ØØ« اÙÙÙØ¯ داخ٠counter() ع٠Ù
ØªØºÙØ± count Ø ÙØ¨ØØ« Ø£ÙÙØ§Ù ÙÙ Ø¨ÙØ¦ØªÙ اÙÙØºÙÙØ© Ø§ÙØ®Ø§ØµØ© (Ø§ÙØªÙ تÙÙÙ ÙØ§Ø±ØºØ© Ø ÙØ£ÙÙ ÙØ§ ØªÙØ¬Ø¯ Ù
ØªØºÙØ±Ø§Øª Ù
ØÙÙØ© ÙÙØ§Ù) Ø Ø«Ù
ÙÙ Ø¨ÙØ¦Ø© makeCounter() Ø§ÙØ®Ø§Ø±Ø¬ÙØ© Ø§ÙØªÙ ÙØªÙ
Ø§Ø³ØªØ¯Ø¹Ø§Ø¤ÙØ§ Ù
ÙÙØ§Ø ØÙØ« ÙØ¬Ø¯ اÙÙ
ØªØºÙØ± ÙÙÙÙÙ
بتغÙÙØ±Ù.
** اÙÙ
ØªØºÙØ± تÙ
تعدÙÙÙ ÙÙ Ø§ÙØ¨Ùئة اÙÙ
عجÙ
ÙØ© ØÙØ« ÙØ¹ÙØ´.**
ÙØ§ ÙÙ Ø§ÙØØ§ÙØ© بعد Ø§ÙØªÙÙÙØ°:
إذا ÙØ§Ø¯ÙÙØ§ counter() Ù
Ø±Ø§ØªÙ Ø¹Ø¯ÙØ¯Ø©, اÙÙ
ØªØºÙØ± count Ø³ÙØ²Ùد Ø¥ÙÙ 2, 3 ÙÙÙØ°Ø§ ÙÙ ÙÙØ³ اÙÙ
ÙØ§Ù
ÙÙØ§Ù Ù ØµØ·ÙØ عا٠ÙÙØ³ØªØ¹Ù Ù ÙÙ Ø§ÙØ¨Ø±Ù جة باس٠«اÙÙ ÙÙØºÙÙÙ» Clousure ÙÙÙÙØªØ±Ø¶ Ø£Ù ÙØ¹Ù٠ب٠اÙÙ Ø·ÙÙØ±ÙÙ.
A اÙÙ ÙØºÙÙØ§Øª is a function that remembers ÙÙ Ø¯Ø§ÙØ© تتذÙÙØ± Ù ØªØºÙØ±Ø§ØªÙا Ø§ÙØ®Ø§Ø±Ø¬ÙØ© Ù٠ا ÙÙÙ ÙÙÙØ§ أ٠تص٠إÙÙÙØ§. ÙØ°Ø§ Ø§ÙØ£Ù ر -Ù٠بعض اÙÙØºØ§Øª- ٠ستØÙÙØ أ٠أÙÙÙ ÙÙØ²Ù ÙØªØ§Ø¨Ø© Ø§ÙØ¯Ø§ÙØ© بطرÙÙØ© ٠عÙÙÙØ© ÙÙØØ¯Ø« ذÙÙ. ÙÙÙÙ Ù٠ا شرØÙا Ø£Ø¹ÙØ§Ù ÙÙÙ ÙØºØ© Ø¬Ø§ÙØ§ Ø³ÙØ±ÙØ¨ØªØ ÙÙÙ Ø§ÙØ¯Ùا٠٠ÙÙØºÙÙÙØ§Øª Ø¨Ø·Ø¨ÙØ¹ØªÙا (ÙØ·Ø¨Ø¹Ùا Ø«Ù ÙØ© Ø§Ø³ØªØ«ÙØ§Ø¡ ÙØ§ØØ¯ Ø£ÙØØ¯ ÙØ´Ø±ØÙ ÙÙ ÙØµÙ ترÙÙØ¨ Ø¬Ù ÙØ© Ø¯Ø§ÙØ© Ø¬Ø¯ÙØ¯Ø© "new Function").
ÙØ¹Ù٠ذÙ٠بأÙÙ Ø§ÙØ¯Ùا٠تتذÙÙØ± Ø£Ù٠أÙÙØ´Ø¦Øª باستعÙ
Ø§Ù Ø®Ø§ØµÙØ© â[[Environment]]â Ø§ÙÙ
Ø®ÙÙØ©Ø ÙÙ
ا ÙÙÙ
ÙÙ ÙÙØ¯ÙØ§Ù ÙØ§ÙØ© اÙÙØµÙ٠إÙÙ Ù
ØªØºÙØ±Ø§ØªÙا Ø§ÙØ®Ø§Ø±Ø¬ÙØ©.
ÙÙ ÙÙØª Ø¹Ø²ÙØ²Ù Ù
Ø·ÙÙØ± اÙÙØ§Ø¬Ùات ÙÙ Ù
ÙØ§Ø¨ÙØ©Ù ÙØ£ØªØ§Ù Ø§ÙØ³Ø¤Ø§Ù «Ù
ا Ù٠اÙÙ
ÙÙØºÙÙÙØÂ» ÙÙÙ
ÙÙÙ Ø£Ù ØªÙØ¯ÙÙ
تعرÙÙ٠شرØÙØ§Ø ÙÙ
ا ÙØªÙضÙ٠بأÙÙ Ø§ÙØ¯Ùا٠ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ÙÙÙÙØ§ Ù
ÙÙØºÙÙÙØ§ØªØ ÙØ±Ø¨Ù
ا Ø´ÙØ¡ Ù
Ù Ø¹ÙØ¯Ù ØªÙØ§ØµÙ٠تÙÙÙØ© Ù
Ø«Ù Ø®Ø§ØµÙØ© â[[Environment]]â ÙØ·Ø±ÙÙØ© عÙ
Ù Ø§ÙØ¨Ùئات اÙÙ
ÙØ¹Ø¬Ù
ÙØ©.
ÙÙØ³ اÙÙ ÙÙ ÙØ§Øª
عادة٠٠ا تÙÙ Ø³Ø ÙØªÙØØ°Ù Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© بعد٠ا ØªØ¹Ù Ù Ø§ÙØ¯Ø§ÙØ©
ÙÙ
ع ذÙÙØ إذا ÙØ§Ù ÙÙØ§Ù Ø¯Ø§ÙØ© Ù
ØªØ¯Ø§Ø®ÙØ© ÙÙ
Ù٠اÙÙØµÙ٠إÙÙÙØ§ بعد Ø§ÙØªÙاء Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ£ØµÙÙØ©Ø ÙØ¥Ù ÙØ¯ÙÙØ§ Ø®Ø§ØµÙØ© [[Environment]] Ø§ÙØªÙ ØªØ´ÙØ± Ø¥ÙÙ Ø§ÙØ¨Ùئة اÙÙØºÙÙØ©.
ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ©Ø ÙÙ Ù٠اÙÙØµÙ٠إÙÙ Ø§ÙØ¨Ùئة اÙÙØºÙÙØ© ØØªÙ بعد Ø§ÙØªÙ Ø§Ù Ø§ÙØ¯Ø§ÙØ©Ø ÙØ°Ù٠تبÙÙ ØÙØ©.
٠ثاÙ:
function f() {
let value = 123;
return function () {
alert(value);
};
}
let g = f(); // g.[[Environment]] stores a reference to the Lexical Environment
// of the corresponding f() call
ÙØ±Ø¬Ù Ù
ÙØ§ØØ¸Ø© Ø£Ù٠إذا تÙ
استدعاء f() Ø§ÙØ¹Ø¯Ùد Ù
٠اÙÙ
Ø±Ø§ØªØ ÙØªÙ
ØÙظ Ø§ÙØ¯Ùا٠اÙÙØ§ØªØ¬Ø©Ø ÙØ³ÙتÙ
Ø§ÙØ¥ØØªÙاظ بجÙ
ÙØ¹ ÙØ§Ø¦Ùات Ø§ÙØ¨Ùئة اÙÙØºÙÙØ© اÙÙ
ÙØ§Ø¨ÙØ© ÙÙ Ø§ÙØ°Ø§Ùرة. Ù٠اÙÙÙØ¯ Ø£Ø¯ÙØ§ÙØ Ø³ÙØªÙ
Ø§ÙØ¥ØØªÙاظ بجÙ
ÙØ¹ اÙÙØ§Ø¦Ùات اÙÙØºÙÙØ© Ø§ÙØ«Ùاثة:
function f() {
let value = Math.random();
return function () {
alert(value);
};
}
// Ù٠اÙÙ
صÙÙÙØ© Ø«ÙØ§Ø« Ø¯ÙØ§Ù ØªÙØ´Ùر ÙÙÙ Ù
ÙÙØ§ Ø¥ÙÙ Ø§ÙØ¨Ùئة اÙÙ
ÙØ¹Ø¬Ù
ÙØ©
// â«Ù٠عÙ
ÙÙØ© Ø§ÙØªÙÙÙØ° f()â Ø§ÙÙ
ÙØ§Ø¨ÙØ© ÙÙÙÙ ÙØ§ØØ¯Ø©
let arr = [f(), f(), f()];
ÙÙ ÙØª ÙØ§Ø¦Ù Ø§ÙØ¨Ùئة اÙÙ ÙØ¹Ø¬Ù ÙØ© ØÙÙ ÙØ§ ÙÙ ÙÙ Ø£Ù ÙØµÙ Ø¥ÙÙÙ Ø´ÙØ¡ (Ù٠ا Ø§ÙØØ§Ù Ù Ø¹ Ø£ÙÙ ÙØ§Ø¦Ù آخر). بعبارة أخر٠ÙÙÙ Ù ÙØ¬Ùد طاÙ٠ا Ø«Ù ÙØ© Ø¯Ø§ÙØ© Ù ØªØ¯Ø§Ø®ÙØ© ÙØ§ØØ¯Ø© (عÙÙ Ø§ÙØ£ÙÙ) Ù٠اÙÙÙØ¯ ØªÙØ´Ùر Ø¥ÙÙÙ.
Ù٠اÙÙÙØ¯ أسÙÙÙØ بعدÙ
ا ØªØµÙØ± âgâ Ù
ØØ§ÙØ© اÙÙØµÙ٠تÙÙ
Ø³Ø Ø¨ÙØ¦ØªÙا اÙÙ
ÙØ¹Ø¬Ù
ÙØ© ÙÙÙØ§ (ÙÙ
Ø¹ÙØ§ Ù
ØªØºÙØ± âvalueâ) Ù
Ù Ø§ÙØ°Ø§Ùرة:
function f() {
let value = 123;
return function () {
alert(value);
};
}
let g = f(); // â«Ø·Ø§ÙÙ
ا ÙÙ
Ù٠أ٠تص٠func بإشارة Ø¥ÙÙ gØ Ø³ØªØ¸Ù٠تشغ٠ØÙÙØ²Ùا ÙÙ Ø§ÙØ°Ø§Ùرة
g = null; // ...ÙØ§ÙØ¢Ù ÙÙ
تعد ÙØ°ÙÙ ÙÙÙÙÙ ÙØ¯ ÙØ¸ÙÙÙØ§ Ø§ÙØ°Ø§Ùرة
Ø§ÙØªØØ³ÙÙØ§Øª عÙ٠أرض اÙÙØ§Ùع
Ù٠ا رأÙÙØ§Ø ÙÙØ¸Ø±ÙÙØ§ طاÙ٠ا Ø§ÙØ¯Ø§ÙØ© «ØÙÙØ© ØªÙØ±Ø²Ù» تبÙÙ Ù Ø¹ÙØ§ ÙÙ Ù ØªØºÙØ±Ø§ØªÙا Ø§ÙØ®Ø§Ø±Ø¬ÙØ©.
Ø«Ù ÙØ© -ÙÙ Ù ØØ±ÙÙ V8 (ÙØ±ÙÙ ÙØ£Ùبرا)- ØªØ£Ø«ÙØ± Ù ÙÙ Ù Ø£ÙØ§ ÙÙ٠أÙÙ ÙØ°Ø§ اÙÙ ØªØºÙØ± ÙÙ ÙÙÙÙ Ù ÙØªØ§ØÙا Ø£Ø«ÙØ§Ø¡ Ø§ÙØªÙÙÙØ.
Ø¬Ø±ÙØ¨ تشغÙ٠اÙÙ Ø«Ø§Ù Ø§ÙØ¢ØªÙ ÙÙ Â«Ø£Ø¯ÙØ§Øª اÙÙ Ø·ÙÙØ±ÙÙ» داخ٠٠تصÙÙØ ÙØ±ÙÙ .
Ù
ا Ø¥Ù ÙÙÙØ¨Ø« تÙÙÙØ° Ø§ÙØ´ÙÙØ±Ø©Ø Ø§ÙØªØ¨ âalert(value)â ÙÙ Ø§ÙØ·Ø±ÙÙØ©.
function f() {
let value = Math.random();
function g() {
debugger; // in console: type alert(value); No such variable!
}
return g;
}
let g = f();
g();
Ù٠ا رأÙÙØ§Ø ٠ا Ù Ù Ù ØªØºÙØ± ÙÙØ°Ø§! ÙÙÙØªØ±Ø¶ ÙØ¸Ø±ÙÙØ§ Ø£Ù ÙØµÙ Ø¥ÙÙÙ ÙÙÙÙ٠اÙÙ ØØ±ÙÙ ØØ³Ù٠أداء Ø§ÙØ´ÙÙØ±Ø© ÙØØ°ÙÙ.
ÙØ¤Ø¯Ù٠ذÙ٠أØÙاÙÙØ§ Ø¥Ù٠٠شاÙ٠٠ضØÙØ© (ÙØ°Ø§ Ø¥Ù ÙÙ ØªØ¬ÙØ³ عÙÙÙØ§ اÙÙÙ٠بطÙÙÙ ÙØÙÙÙØ§) Ø£Ø«ÙØ§Ø¡ Ø§ÙØªÙÙÙØ. Ø¥ØØ¯Ù ÙØ°Ù اÙ٠شاÙÙ ÙÙ Ø£Ù ÙØ±Ù اÙÙ ØªØºÙØ± Ø§ÙØ®Ø§Ø±Ø¬Ù Ø¨Ø¯Ù Ø§ÙØ°Ù تÙÙÙØ¹Ùا Ø£Ù ÙØ±Ø§Ù (ÙØÙ Ù ÙÙØ§Ù٠ا ÙÙØ³ Ø§ÙØ§Ø³Ù ):
let value = 'Surprise!';
function f() {
let value = 'the closest value';
function g() {
debugger; // in console: type alert(value); Surprise!
}
return g;
}
let g = f();
g();
ÙØ°Ù اÙÙ ÙØ²Ø© ÙÙ V8 Ø¬ÙØ¯Ø© ÙÙÙ Ø¹Ø±ÙØ©. إذا ÙÙØª تÙÙ٠بتصØÙØ Ø§ÙØ£Ø®Ø·Ø§Ø¡ باستخدا٠Chrome / Edge / Opera Ø ÙÙ ÙÙØª ٠ا Ø³ØªÙØ§Ø¬Ù ÙØ°Ù اÙÙ ÙØ²Ø©.
ÙØ§ ÙØ¹ØªØ¨Ø± ÙØ°Ø§ خطأ ÙÙ Ù ØµØØ Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø Ø¨Ù ÙÙ Ù ÙØ²Ø© خاصة ÙÙ V8. رب٠ا Ø³ÙØªÙ تغÙÙØ±Ùا ÙÙ ÙÙØª ٠ا. ÙÙ ÙÙÙ Ø¯Ø§Ø¦Ù ÙØ§ Ø§ÙØªØÙ٠٠٠ذÙ٠ع٠طرÙ٠تشغÙÙ Ø§ÙØ£Ù Ø«ÙØ© عÙÙ ÙØ°Ù Ø§ÙØµÙØØ©.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)