Ù٠ا ÙØ¹Ø±Ù Ø¬Ù ÙØ¹Ø§Ù Ø£Ù Ø§ÙØ¯Ø§ÙØ© ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت تعتبر ÙÙÙ Ø©.
ÙÙÙ ÙÙÙ Ø© ÙÙ ÙØ°Ù اÙÙØºØ© ÙÙØ§ ÙÙØ¹. إذا ٠ا ÙÙ ÙÙØ¹ Ø§ÙØ¯Ø§ÙØ©Ø
ÙÙ ÙØºØ© Ø¬Ø§ÙØ§ Ø³ÙØ±ÙØ¨ØªØ Ø§ÙØ¯ÙØ§Ù ÙØ§Ø¦Ùات.
ÙØ§ÙطرÙÙØ© Ø§ÙØ¬Ùدة ÙÙ ØªØ³ØªØ·ÙØ¹ تخÙÙ Ø§ÙØ¯Ùا٠ÙÙ Ø£Ù ØªØ¹ØªØ¨Ø±ÙØ§ ÙØ§Ø¦Ùات تÙÙ٠ببعض Ø§ÙØ£ÙØ¹Ø§Ù ÙØ§Ø¨ÙØ© ÙÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡. ÙØ§ ÙØ³ØªØ·Ùع ÙÙØ· Ù ÙØ§Ø¯Ø§ØªÙا ب٠ÙÙ Ø¹Ø§Ù ÙØªÙا ÙØ£ÙÙØ§ ÙØ§Ø¦Ùات: Ø¥Ø¶Ø§ÙØ©/Ø¥Ø²Ø§ÙØ© Ø£Ù Ø®Ø§ØµÙØ© بداخÙÙØ§Ø تخزÙ٠٠رجع ÙØ´Ùر Ø¥ÙÙÙØ§ Ø§ÙØ®.
Ø®Ø§ØµÙØ© âØ§ÙØ§Ø³Ù â
ÙØ§Ø¦Ù Ø§ÙØ¯Ø§ÙØ© ÙØØªÙ٠عÙ٠بعض Ø§ÙØ®Ùاص Ø§ÙØªÙ ÙØ¹Ø§Ø¯ Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ§ ÙØ«ÙراÙ
Ù Ø«ÙØ§Ù Ø§Ø³Ù Ø§ÙØ¯Ø§ÙØ© ÙØ¹ØªØ¨Ø± Ù ØªØ§ØØ§ عÙÙ Ø´ÙÙ Ø®Ø§ØµÙØ© Ø§ÙØ§Ø³Ù ânameâ.
function sayHi() {
alert('Hi');
}
alert(sayHi.name); // sayHi
ÙØ§ÙطرÙÙ ÙÙ Ø§ÙØ£Ù ر Ø£ÙØ¶Ø§ÙØ Ù ÙØ·Ù Ø¥Ø¶Ø§ÙØ© Ø§ÙØ§Ø³Ù ÙÙØ§ ÙØ¹ØªØ¨Ø± ذÙÙØ§Ù. Ø¥ÙÙØ§ Ø£ÙØ¶Ø§Ù تضÙÙ Ø§ÙØ§Ø³Ù Ø§ÙØµØÙØ ÙÙØ¯Ø§ÙØ© ØØªÙ ÙØ¥Ù ÙØ§Ùت Ø§ÙØ¯Ø§ÙØ© ØªÙ Ø¥ÙØ´Ø§Ø¦Ùا دÙ٠اس٠ÙÙÙÙ ØªÙ Ø¥Ø¶Ø§ÙØªÙ بعد ØµÙØ¹Ùا ÙÙØ±Ø§Ù:
let sayHi = function () {
alert('Hi');
};
alert(sayHi.name); // sayHi (there's a name!)
Ø¥ÙÙØ§ ØªØ¹Ù Ù Ø£ÙØ¶Ø§Ù ÙÙ ØØ§Ù إذا ÙØ§Ùت Ø§ÙØ¥Ø¶Ø§ÙØ© تت٠ع٠طرÙÙ ÙÙÙ Ø© Ø§ÙØªØ±Ø§Ø¶ÙØ©:
function f(sayHi = function () {}) {
alert(sayHi.name); // sayHi (works!)
}
f();
ÙÙ Ù ÙØ§ØµÙات Ø§ÙØ¯Ø§ÙØ© ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© ØªØ³Ù Ù Ø§ÙØ§Ø³Ù Ø§ÙØ³ÙاÙÙ âcontextual nameâ. ÙØ¥Ø°Ø§ ÙØ§Ùت Ø§ÙØ¯Ø§ÙØ© ÙØ§ تÙÙØ± ÙÙØ§ ÙØ§ØØ¯Ø§ÙØ ÙØ¥Ù ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© Ø¹ÙØ¯ Ø§ÙØ¥Ø¶Ø§ÙØ© ØªØ³ØªØ·ÙØ¹ Ù Ø¹Ø±ÙØªÙ Ù Ù Ø§ÙØ³ÙاÙ.
ÙØ°Ø§ اÙÙÙØ§Ù ÙØ´Ù Ù Ø¯ÙØ§Ù اÙÙØ§Ø¦Ùات Ø£ÙØ¶Ø§Ù:
let user = {
sayHi() {
// ...
},
sayBye: function () {
// ...
},
};
alert(user.sayHi.name); // sayHi
alert(user.sayBye.name); // sayBye
ÙØ§ Ø³ØØ± ÙÙØ§. ÙØ£ÙÙ Ù٠بعض Ø§ÙØØ§ÙØ§Øª ÙØ§ ÙØ³ØªØ·Ùع اÙÙ ØØ±Ù Ø£Ù ÙØ¹Ø±Ù Ø§ÙØ§Ø³Ù Ø§ÙØµØÙØ. ÙØ°ÙÙ ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ© Ø®Ø§ØµÙØ© Ø§ÙØ§Ø³Ù ØªØµØ¨Ø ÙØ§Ø±ØºØ©Ø Ù Ø«Ù ÙØ°Ù Ø§ÙØØ§ÙØ©:
// function created inside array
let arr = [function () {}];
alert(arr[0].name); // <empty string>
// اÙÙ
ØØ±Ù ÙÙ
ÙØ¬Ø¯ طرÙÙØ© ÙØªØ³Ù
ÙØ© Ø§ÙØ¥Ø³Ù
Ø§ÙØµØÙØ, ÙØ°ÙÙ ÙØ§ ÙØ¬Ø¯ إسÙ
ÙÙÙ ÙØ°Ù ØØ§Ùات ضعÙÙØ© ÙØ£ØºÙب Ø§ÙØ¯Ùا٠ÙÙØ§ Ø®Ø§ØµÙØ© Ø§ÙØ§Ø³Ù .
Ø®Ø§ØµÙØ© âlengthâ
ÙÙØ§Ù Ø®Ø§ØµÙØ© أخر٠ت٠تÙÙÙØ§ Ø§ÙØ¯Ùا٠ÙÙÙ Ø®Ø§ØµÙØ© âlengthâ. ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© تعطÙÙØ§ عدد Ø§ÙØ¹ÙØ§Ù Ù Ø§ÙØ¯Ø§ÙØ©Ø Ù Ø«ÙØ§Ù:
function f1(a) {}
function f2(a, b) {}
function many(a, b, ...more) {}
alert(f1.length); // 1
alert(f2.length); // 2
alert(many.length); // 2
ÙÙØ§ ÙÙØ§ØØ¸ Ø£Ù Ø§ÙØ¹ÙØ§Ù Ù Ø§ÙØ¨Ø§ÙÙØ© (rest parameters) ÙØ§ ØªÙØ¹Ø¯.
Ø®Ø§ØµÙØ© Ø§ÙØ·ÙÙ length تستخدÙ
Ø£ØÙØ§ÙØ§Ù ÙÙØ¥Ø³ØªØ¨Ø·Ø§Ù Ø§ÙØ°Ø§Øª Ø¯Ø§Ø®Ù Ø§ÙØ¯ÙØ§Ù Ø§ÙØªÙ تعتÙ
د عÙÙ Ø¯ÙØ§Ù أخرÙ.
Ù
Ø«ÙØ§Ù Ø¨Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØªÙ ÙÙ Ø§ÙØ£Ø³ÙÙØ Ø§ÙØ¯Ø§ÙØ© ask ØªÙØ¨Ù Ø§ÙØ¹Ø§Ù
Ù question ÙØªØ³Ø£ÙÙ ÙØ¹Ø¯Ø¯ Ø¹Ø´ÙØ§Ø¦Ù Ù
٠اÙÙ handler Ø¯ÙØ§Ù ÙØªÙÙÙØ°Ùا.
ب٠جرد Ø£Ù ÙÙØ¯Ù اÙÙ Ø³ØªØ®Ø¯Ù Ø§ÙØ¥Ø¬Ø§Ø¨Ø©Ø Ø§ÙØ¯Ø§ÙØ© ØªÙØ§Ø¯Ù اÙÙ handler. ÙÙ Ù٠أ٠Ù٠رر ÙÙØ¹Ù٠٠٠اÙÙ handlers:
- Ø¯Ø§ÙØ© ÙØ§ ت٠تÙÙ Ø¹ÙØ§Ù ÙØ Ø§ÙØªÙ تÙÙØ§Ø¯Ù ÙÙØ· Ø¹ÙØ¯Ù ا ÙØ¹Ø·Ù اÙ٠ستخد٠إجابة Ø¨Ø§ÙØ¥ÙجابØ
- Ø¯Ø§ÙØ© ÙØ¯ÙÙØ§ Ø¹ÙØ§Ù ÙØ ÙØªÙÙØ§Ø¯Ù ÙÙ ÙÙØªØ§ Ø§ÙØØ§ÙØªÙÙ ÙØªØ¹Ø·ÙÙØ§ إجابة.
ÙØªØªÙ
Ù
ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© handler Ø¨Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØµØÙØØ©Ø ÙÙØØµ Ø®Ø§ØµÙØ© handlers.length.
اÙÙÙØ±Ø© ÙÙ Ø£Ù ÙØ¯ÙÙØ§ Ø¯Ø§ÙØ© ÙÙØ³ ÙÙØ§ Ø¹ÙØ§Ù Ù ÙÙØØ§ÙØ§Øª Ø§ÙØ¥ÙØ¬Ø§Ø¨ÙØ©Ø ÙÙÙ ØªØ³ØªØ·ÙØ¹ دع٠اÙÙ handlers Ø£ÙØ¶Ø§Ù:
function ask(question, ...handlers) {
let isYes = confirm(question);
for (let handler of handlers) {
if (handler.length == 0) {
if (isYes) handler();
} else {
handler(isYes);
}
}
}
// ÙÙØ¥Ùجابات Ø§ÙØ¥Ø¬Ø§Ø¨ÙØ© تتÙ
Ù
ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙتÙÙ
// ÙÙØ¥Ùجابات Ø§ÙØ³ÙØ¨ÙØ© تتÙ
Ù
ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ«Ø§ÙÙØ© ÙÙØ·
ask(
'Question?',
() => alert('You said yes'),
(result) => alert(result)
);
ÙØ°Ù Ø§ÙØØ§ÙØ© ØªÙØ³Ù
٠تعدد Ø§ÙØ£Ø´Ùا٠â Ù
عاÙ
ÙØ© Ø§ÙØ¹ÙاÙ
٠بطر٠Ù
ختÙÙØ© إعتÙ
ادا٠عÙÙ ÙÙØ¹ÙÙ
Ø£Ù ÙÙ ØØ§ÙØªÙØ§ إعتÙ
ادا٠عÙÙ Ø§ÙØ·ÙÙ length. اÙÙÙØ±Ø© عاÙ
ة٠ÙÙØ§ استخداÙ
ÙÙ Ù
ÙØªØ¨Ø§Øª Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت.
خصائص ٠خصصة
ÙØ³ØªØ·Ùع Ø£ÙØ¶Ø§Ù Ø¥Ø¶Ø§ÙØ© Ø§ÙØ®Ø§ØµÙØ© Ø§ÙØªÙ ÙØ±ÙØ¯ÙØ§ Ø¥ÙÙ Ø§ÙØ¯Ø§ÙØ©.
ÙÙ ÙØ°Ø§ اÙÙ
Ø«Ø§Ù Ø³ÙØ¶Ø¹ Ø®Ø§ØµÙØ© counter ÙÙØ³ØªØ·Ùع ØªØØ¯Ùد عدد اÙÙ
ÙØ§Ø¯Ùات اÙÙÙÙ ÙÙØ¯Ø§ÙØ©:
function sayHi() {
alert("Hi");
// ÙÙØØ³Ø¨ عدد Ù
رات تÙÙÙØ° Ø§ÙØ¯Ø§ÙØ©
sayHi.counter++;
}
sayHi.counter = 0; // ÙÙÙ
Ø© Ø¥Ø¨ØªØ¯Ø§Ø¦ÙØ©
sayHi(); // Hi
sayHi(); // Hi
alert( `Called ${sayHi.counter} times` ); // Called 2 times
Ø§ÙØ®Ø§ØµÙØ© Ø§ÙØªÙ تضا٠ÙÙØ¯Ø§ÙØ© Ù
ث٠sayHi.counter = 0 ÙØ§ تعرÙÙ ÙÙ
ØªØºÙØ± Ù
ØÙÙ counter داخÙÙØ§.
أ٠بطرÙÙØ© Ø£Ø®Ø±Ù Ø§ÙØ®Ø§ØµÙØ© counter ÙØ§ÙÙ
ØªØºÙØ± let counter Ø´ÙØ¦Ø§Ù ÙÙØ³ ÙÙÙ
ا Ø¹ÙØ§ÙØ© ببعضÙÙ
ÙÙ ÙÙ Ø£Ù ÙØ¹Ø§Ù Ù Ø§ÙØ¯Ø§ÙØ© Ù Ø«Ù Ù Ø¹Ø§Ù ÙØ© Ø§ÙØ´Ø¦, تخزÙ٠خصائص داخÙÙØ§ ÙÙÙ ÙÙØ³ ÙÙØ§ تأثر عÙ٠تÙÙÙØ°Ùا. اÙÙ ØªØºÙØ±Ø§Øª ÙÙØ³Øª خصائص ÙÙØ¯Ø§ÙØ© ÙØ§ÙØ¹ÙØ³ صØÙØ.
Ø®ÙØ§Øµ Ø§ÙØ¯Ø§ÙØ© ÙÙ Ù٠أ٠تستبد٠ع٠ÙÙØ§Øª Ø§ÙØ¥ØºÙا٠أØÙØ§ÙØ§Ù. Ù Ø«ÙØ§Ù ÙÙ ÙÙÙØ§ إعادة ÙØªØ§Ø¨Ø© Ù Ø«Ø§Ù Ø¯Ø§ÙØ© Ø§ÙØ¹Ø¯Ø§Ø¯ اÙÙ ÙØ¬Ùد ÙÙ ÙØ°Ø§ اÙÙØµÙ ÙØ·Ø§Ù اÙÙ ØªØºÙØ±Ø§ØªØ Ø§ÙØ¥ØºÙØ§Ù ÙØ§Ø³ØªØ®Ø¯Ø§Ù Ø®Ø§ØµÙØ© Ø§ÙØ¯Ø§ÙØ©:
function makeCounter() {
// Ø¨Ø¯ÙØ§Ù Ù
Ù :
// let count = 0
function counter() {
return counter.count++;
}
counter.count = 0;
return counter;
}
let counter = makeCounter();
alert(counter()); // 0
alert(counter()); // 1
count Ø§ÙØ£Ù تÙ
تخزÙÙÙ ÙÙ Ø§ÙØ¯Ø§ÙØ© Ù
Ø¨Ø§Ø´Ø±Ø©Ø ÙÙØ³ ÙÙ ØØ¯Ø³Ùا Ø§ÙØ®Ø§Ø±Ø¬Ù Lexical Environment
ÙÙ ÙØ°Ø§ ÙØ¹ØªØ¨Ø± Ø£ÙØ¶Ù Ø£Ù Ø£Ø³ÙØ¡ Ù Ù Ø§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØ¥ØºÙØ§ÙØ
Ø§ÙØ¥Ø®ØªÙØ§Ù Ø§ÙØ£Ø³Ø§Ø³Ù Ù٠أ٠ÙÙÙ
Ø© count ØªØ¹ÙØ´ داخ٠Ù
ØªØºÙØ± Ø®Ø§Ø±Ø¬Ù ÙØ°ÙÙ Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ÙØ§ ØªØ³ØªØ·ÙØ¹ اÙÙØµÙ٠إÙÙÙ. ÙØØ¯ÙØ§ Ø§ÙØ¯Ùا٠اÙÙ
ØªØ¯Ø§Ø®ÙØ© ÙÙ Ø§ÙØªÙ Ù
٠اÙÙ
Ù
ÙÙ Ø£Ù ØªØ³ØªØ·ÙØ¹ تعدÙÙÙ. ÙÙ٠إذا ÙØ§Ù Ù
ÙÙÙØ¯Ø§Ù Ø¨Ø§ÙØ¯Ø§ÙØ©Ø Ø¥Ø°Ø§Ù ÙØ°Ø§ Ù
Ù Ø§ÙØ³ÙÙ ØØ¯Ùث٠ÙÙØ°Ø§ ÙÙ Ø§ÙØ¥Ø®ØªÙا٠بÙÙÙÙ
:
function makeCounter() {
function counter() {
return counter.count++;
};
counter.count = 0;
return counter;
}
let counter = makeCounter();
counter.count = 10;
alert( counter() ); // 10
ÙØ°ÙÙ Ø¥Ø®ØªÙØ§Ø± طرÙÙØ© اÙÙØªØ§Ø¨Ø© ÙØ§ÙØ¨ÙØ§Ø¡ تعت٠د عÙÙ Ø£ÙØ¯Ø§ÙÙØ§ Ù٠اÙÙ Ø´Ø±ÙØ¹.
ØªØ¹Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ© اÙÙ ÙØ³ÙÙ ÙÙÙ
ØªØ¹Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ© اÙÙ ÙØ³ÙÙ ÙÙ٠أ٠(NFE) اختصارا٠ÙÙ Named Function ExpressionØ ÙØ¹ØªØ¨Ø± تعرÙÙ ÙÙØ¯Ø§ÙØ© ÙØØªÙ٠عÙ٠اس٠.
Ù Ø«ÙØ§ÙØ ÙÙØ£Ø®Ø° Ù Ø«Ø§Ù ÙØªØ¹Ø¨Ùر Ø¯Ø§ÙØ©:
let sayHi = function (who) {
alert(`Hello, ${who}`);
};
ÙÙØ¶Ù٠اس٠ÙÙØ§:
let sayHi = function func(who) {
alert(`Hello, ${who}`);
};
ÙÙ ØÙÙÙØ§ Ø£Ù Ø´ÙØ¡ ÙÙØ§Ø Ù
ا Ù٠غرض Ø²ÙØ§Ø¯Ø© اسÙ
"func"Ø
Ø£ÙÙØ§Ù Ø¯Ø¹ÙØ§ ÙÙØ§ØØ¸ Ø£ÙÙØ§ Ù
Ø§Ø²Ø§Ù ÙØ¯ÙÙØ§ ØªØ¹Ø¨ÙØ± Ø¯Ø§ÙØ©. ÙØ¥Ø¶Ø§ÙØ© اسÙ
"func" بعد function ÙÙ
ÙÙÙ
بتعرÙÙ Ø§ÙØ¯Ø§ÙØ© ÙØ£ÙÙØ§ Ù
Ø§Ø²Ø§ÙØª Ø¬Ø²Ø¡ÙØ§ Ù
Ù ØªÙØ¶ÙØ ØªØ¹Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ©.
ÙÙØ¶Ø¹ ÙØ°Ø§ Ø§ÙØ§Ø³Ù ÙÙ ÙØ¹Ø·Ù Ø£Ù Ø´ÙØ¡.
ÙØ§ÙØ¯Ø§ÙØ© Ù
Ø§Ø²Ø§ÙØª Ù
ØªØ§ØØ© باسÙ
sayHi():
إذا٠٠ا ÙÙ ÙØ§Ø¦Ø¯ØªÙاØ!
let sayHi = function func(who) {
alert(`Hello, ${who}`);
};
sayHi("John"); // Hello, John
ÙÙØ§Ù Ø´ÙØ¦ÙÙ ØÙÙ Ø§ÙØ¥Ø³Ù
funcØ ÙÙ
ا Ø§ÙØ³Ø¨Ø¨ ÙÙ ÙØªØ§Ø¨ØªÙا ÙÙÙ
.
- ÙØ³Ù Ø ÙÙØ¯Ø§ÙØ© Ø¨Ø§ÙØ¥Ø´Ø§Ø±Ø© Ø¥ÙÙ ÙÙØ³Ùا داخÙÙØ§Ù.
- ÙØ§ ÙÙØ±Ù خارج Ø§ÙØ¯Ø§ÙØ©
Ù
Ø«ÙØ§Ù Ø§ÙØ¯Ø§ÙØ© sayHi ØªÙØ§Ø¯Ù ÙÙØ³Ùا Ù
رة أخر٠باÙÙ "Guest" إذا ÙÙ
ÙÙÙ who Ù
ÙØ¹Ø·Ù.
let sayHi = function func(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
func("Guest"); // ÙÙ
ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© Ù
رة أخرÙ
}
};
sayHi(); // Hello, Guest
// ÙÙÙ ÙØ°Ø§ ÙÙ ÙØ¹Ù
Ù ÙØ£Ù ÙØ°Ø§ Ø§ÙØ¥Ø³Ù
ÙØ§ ÙØ±Ù Ù٠خارج تعرÙÙ Ø§ÙØ¯Ø§ÙØ© :
func(); // Error, func is not defined (not visible outside of the function)
ÙÙ
اذا استخدÙ
ÙØ§ funcØ ÙÙÙ
ÙØ³ØªØ®Ø¯Ù
sayHi Ø ÙÙÙ
ÙØ§Ø¯Ø§Ø© Ø§ÙØ£Ø®Ø±Ù.
Ù٠اÙÙØ§Ùع ÙØÙ ÙÙ ÙÙÙØ§ ÙØ¹Ù ذÙÙ ÙÙÙ ÙØ³Ø¨Ø¨ أخطاء:
let sayHi = function(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
sayHi("Guest");
}
};
ÙÙ٠اÙÙ
Ø´ÙÙØ© Ù
ع Ø§ÙØ´ÙÙØ±Ø© Ù٠أ٠sayHi ÙÙ
ÙÙ Ø£Ù ØªØªØºÙØ± ÙÙ Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØ®Ø§Ø±Ø¬ÙØ©. إذا تÙ
ت تعÙÙÙ Ø§ÙØ¯Ø§ÙØ© ÙÙ
ØªØºÙØ± أخر Ù٠اÙÙ
ÙØ§Ø¨ÙØ Ø§ÙØ´ÙÙØ±Ø© ستبدأ ÙÙ Ø¥Ø¸ÙØ§Ø± أخطاء:
let sayHi = function(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
sayHi("Guest"); // Error: sayHi is not a function
}
};
let welcome = sayHi;
sayHi = null;
welcome(); // Error, the nested sayHi call doesn't work any more!
ÙØ°Ø§ ØØ¯Ø« Ø§ÙØ¯Ø§ÙØ© أخذت sayHi Ù
Ù ØØ¯Ø«Ùا Ø§ÙØ®Ø§Ø±Ø¬Ù lexical environment. ÙÙØ§ ÙÙØ¬Ø¯ Ù
ØªØºÙØ± Ù
ØÙ٠اسÙ
Ù sayHiØ ÙØ°Ù٠اÙÙ
ØªØºÙØ± Ø§ÙØ®Ø§Ø±Ø¬Ù Ù
ستخدÙ
. ÙÙÙ ÙØØ¸Ø© اÙÙ
ÙØ§Ø¯Ø§Ø© sayHi ÙØ¹ØªØ¨Ø± null.
ÙÙØ§ ÙØ£ØªÙ Ø¯ÙØ± Ø§ÙØ§Ø³Ù Ø§ÙØ°Ù ÙØ¶Ø¹ÙØ§Ù Ø¯Ø§Ø®Ù ØªØ¹Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ©.
ÙÙ Ù Ù ÙØÙ ÙØ°Ù اÙ٠شاÙÙ.
Ø¯Ø¹ÙØ§ ÙØ³ØªØ®Ø¯Ù ÙØ°Ø§ ÙÙØµÙØ Ø´ÙÙØ±ØªÙا.
let sayHi = function func(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
func("Guest"); // Now all fine
}
};
let welcome = sayHi;
sayHi = null;
welcome(); // Hello, Guest (nested call works)
Ø§ÙØ£Ù ÙØ°Ø§ ÙØ¹Ù
ÙØ ÙØ£Ù Ø§ÙØ§Ø³Ù
"func" ÙØ¹ØªØ¨Ø± Ø¯Ø§ÙØ© Ù
ØÙÙØ©. ÙØ°Ø§ ÙØ§ ÙØ¤Ø®Ø° Ù
Ù Ø§ÙØ®Ø§Ø±Ø¬. ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© تضÙ
Ù ÙÙØ§ Ø£ÙÙØ§ ستÙÙ٠دائÙ
Ø§Ù ØªØ´ÙØ± Ø¥ÙÙ Ø§ÙØ¯Ø§ÙØ© Ø§ÙØØ§ÙÙØ©.
Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© تظ٠تÙ
Ù٠اÙÙ
ØªØºÙØ± sayHi Ø£Ù welcome. Ù func تعتبر اسÙ
داخÙÙ ÙÙØ¯Ø§ÙØ©.
The outer code still has its variable sayHi or welcome. And func is an âinternal function nameâ, how the function can call itself internally.
Ù٠بعض Ø§ÙØ£ØÙØ§Ù Ø¹ÙØ¯Ù ا ÙØØªØ§Ø¬ Ø¥Ù٠اس٠داخÙÙ ÙÙÙÙ ÙØ°Ø§ Ø§ÙØ³Ø¨Ø¨ ÙØªØÙÙ٠تعرÙÙ Ø§ÙØ¯Ø§ÙØ© Ø¥ÙÙ NFE Ø£Ù ØªØ¹Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ© اÙÙ ÙØ³Ù Ù.
اÙÙ ÙÙØ®Øµ
Ø§ÙØ¯ÙØ§Ù ÙØ§Ø¦Ùات.
ÙÙØ§ Ø³ÙØºØ·Ù ٠ا شرØÙØ§Ù Ù Ø³Ø¨ÙØ§Ù Ø¹Ù Ø®ØµØ§Ø¦ØµÙØ§ :
- Ø§ÙØ§Ø³Ù
nameâ Ø§Ø³Ù Ø§ÙØ¯Ø§ÙØ©. عادة ÙØ¤Ø®Ø° ٠٠تعرÙÙ Ø§ÙØ¯Ø§ÙØ©Ø ÙÙÙ٠إذا ÙØ§Ù ÙØ§ ÙÙØ¬Ø¯ Ø§Ø³Ù Ø Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ØªØØ§Ù٠تخ٠ÙÙÙ Ù Ù Ø§ÙØ³ÙاÙ. - Ø§ÙØ·ÙÙ
lengthâ Ø¹Ø¯Ø¯ Ø§ÙØ¹Ùا٠٠Ù٠تعرÙÙ Ø§ÙØ¯Ø§ÙØ©. ÙØ§ÙØ¹ÙØ§Ù Ù Ø§ÙØ¨Ø§ÙÙØ© Rest parameters ÙØ§ ØªÙØØ³Ø¨.
إذا ت٠تعرÙÙ Ø§ÙØ¯Ø§ÙØ© عÙ٠أÙÙØ§ ØªØ¹Ø¨ÙØ± Ø¯Ø§ÙØ© ÙØªØÙ Ù Ø§Ø³Ù Ø§Ø Ø°ÙÙ ÙØ¯Ø¹Ù NFE ØªØ¹Ø¨ÙØ± Ø§ÙØ¯Ø§ÙØ© اÙÙ ÙØ³ÙÙ ÙÙÙ. Ø§ÙØ§Ø³Ù ÙÙ ÙÙ Ø£Ù ÙØ³ØªØ®Ø¯Ù ÙÙ Ø¯Ø§Ø®Ù Ø§ÙØ¯Ø§ÙØ© ÙØªØ´Ùر Ø¥ÙÙ ÙÙØ³ÙØ§Ø ÙÙØªÙرار Ø£Ù Ø£Ù Ø´ÙØ¡.
Ø£ÙØ¶Ø§ÙØ Ø§ÙØ¯Ø§ÙØ© ÙÙ Ù٠أ٠تØÙ Ù Ø®ÙØ§Øµ أخرÙ. اÙÙØ«Ùر ٠٠اÙÙ ÙØªØ¨Ø§Øª اÙ٠عرÙÙØ© ÙØ¬Ø§Ùا Ø³ÙØ±Ùبت ØªØ¬Ø¹Ù Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ¨Ùر Ù Ù ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ©.
They create a âmainâ function and attach many other âhelperâ functions to it. For instance, the jQuery library creates a function named $. The lodash library creates a function _, and then adds _.clone, _.keyBy and other properties to it (see the docs when you want to learn more about them). Actually, they do it to lessen their pollution of the global space, so that a single library gives only one global variable. That reduces the possibility of naming conflicts.
ÙØ°ÙÙ Ø§ÙØ¯Ø§ÙØ© ÙÙ ÙÙÙØ§ اÙÙÙØ§Ù Ø¨ÙØ§Ø¬Ø¨ رائع Ù Ù ÙÙØ³Ùا ÙÙÙ Ù٠أ٠تØÙ ٠اÙÙØ«Ùر Ù Ù Ø§ÙØ®Ùاص Ø§ÙØ£Ø®Ø±Ù Ù٠داخÙÙØ§.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)