Ø¨ÛØ§ÛÛØ¯ Ø¯ÙØ¨Ø§Ø±Ù Ø³Ø±Û Ø¨Ù ØªØ§Ø¨Ø¹âÙØ§Û ک٠اÙÛ Ø¨Ø²ÙÛÙ .
تابعâÙØ§Û ک٠اÙÛ ÙÙØ· Â«Ú©ÙØªØ§ÙâÙÙÛØ³Û» Ø¨Ø±Ø§Û ÙÙØ´ØªÙ ÚÛØ²ÙØ§Û Ú©ÙÚÚ© ÙÛØ³ØªÙد. Ø¢ÙâÙØ§ ÙÛÚÚ¯ÛâÙØ§ÛÛ Ø®Ø§Øµ Ù Ú©Ø§Ø±Ø¨Ø±Ø¯Û Ø¯Ø§Ø±ÙØ¯.
Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت پر از Ù ÙÙØ¹ÛتâÙØ§ÛÛ Ø§Ø³Øª ک٠٠ا ÙÛØ§Ø² ب٠ÙÙØ´ØªÙ ÛÚ© تابع Ú©ÙÚÚ© دارÛ٠تا جاÛÛ Ø¯Ûگر اجرا Ø´ÙØ¯.
براÛÛ Ù Ø«Ø§Ù:
arr.forEach(func)âfuncØ¨Ø±Ø§Û ÙØ± اÙ٠ا٠آراÛÙ ØªÙØ³Ø·forEachاجرا Ù ÛâØ´ÙØ¯.setTimeout(func)âfuncØªÙØ³Ø· ز٠اÙâØ¨ÙØ¯ درÙÙÛ Ø§Ø¬Ø±Ø§ Ù ÛâØ´ÙØ¯.- â¦Ù ÚÛØ²ÙØ§Û Ø¯Ûگر
اÛÙÚ©Ù ØªØ§Ø¨Ø¹Û Ø±Ø§ بسازÛ٠٠آ٠را جاÛÛ Ø¯Ûگر پاس دÙÛ٠در ذات Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت است.
٠٠ع٠ÙÙØ§ ٠ا ÙÙ ÛâØ®ÙØ§ÙÛ٠ز٠ÛÙÙ Ú©ÙÙÙÛ Ø±Ø§ درÙÙ ÚÙÛ٠تابعâÙØ§ÛÛ Ø§Ø² دست دÙÛÙ . اÛÙØ¬Ø§ جاÛÛ Ø§Ø³Øª ک٠تابعâÙØ§Û ک٠اÙÛ Ø¨Ø¯Ø±Ø¯ Ù ÛâØ®ÙØ±Ùد.
تابعâÙØ§Û ک٠اÙÛ âthisâ ÙØ¯Ø§Ø±Ùد
ÙÙ
Ø§ÙØ·Ùر ک٠از ÙØµÙ Ù
ØªØ¯ÙØ§Û Ø´ÛØ¡Ø "this" Ø¨Ù ÛØ§Ø¯ دارÛÙ
Ø ØªØ§Ø¨Ø¹âÙØ§Û Ú©Ù
اÙÛ this ÙØ¯Ø§Ø±Ùد. اگر ب٠this Ø¯Ø³ØªØ±Ø³Û Ù¾ÛØ¯Ø§ Ú©ÙÛÙ
Ø Ø§Ø² Ø¨ÛØ±ÙÙ Ø¯Ø±ÛØ§Ùت Ù
ÛâØ´ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ ٠ا Ù ÛâØªÙØ§ÙÛ٠از Ø¢Ù Ø¨Ø±Ø§Û ØÙÙ٠زد٠درÙÙ ÛÚ© ٠تد Ø´ÛØ¡ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ :
let group = {
title: "گرÙÙ Ù
ا",
students: ["John", "Pete", "Alice"],
showList() {
this.students.forEach(
student => alert(this.title + ': ' + student)
);
}
};
group.showList();
اÛÙØ¬Ø§ درÙÙ forEachØ ØªØ§Ø¨Ø¹ Ú©Ù
اÙÛ Ø§Ø³ØªÙØ§Ø¯Ù شد٠است پس this.title درÙ٠آ٠اÙگار دÙÛÙØ§ درÙÙ Ù
تد Ø¨ÛØ±ÙÙÛ showList است. ÛØ¹ÙÛ: group.title.
اگر ٠ا ÛÚ© تابع «٠ع٠ÙÙÛ» Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâکردÛÙ Ø ÛÚ© Ø§Ø±ÙØ± Ø¯Ø±ÛØ§Ùت Ù ÛâکردÛÙ :
let group = {
title: "گرÙÙ Ù
ا",
students: ["John", "Pete", "Alice"],
showList() {
this.students.forEach(function(student) {
// را Ø®ÙØ§Ùد undefined از 'title' Ø§Ø±ÙØ±: ÙÙ
ÛâØªÙØ§Ù ÙÛÚÚ¯Û
alert(this.title + ': ' + student);
});
}
};
group.showList();
ب٠دÙÛ٠اÛÙÚ©Ù Ø¨Ù Ø·ÙØ± Ù¾ÛØ´âÙØ±Ø¶ forEach با this=undefined تابع را اجرا Ù
ÛâÚ©ÙØ¯ Ø§Ø±ÙØ± Ø§ÛØ¬Ø§Ø¯ Ù
ÛâØ´ÙØ¯ پس Ø³Ø¹Û Ù
ÛâØ´ÙØ¯ Ú©Ù undefined.title Ø¯Ø±ÛØ§Ùت Ø´ÙØ¯.
اÛÙ Ù
ÙØ¶Ùع رÙÛ ØªØ§Ø¨Ø¹âÙØ§Û Ú©Ù
اÙÛ ØªØ§Ø«ÛØ±Û ÙØ¯Ø§Ø±Ø¯ ÚÙ٠آÙâÙØ§ this ÙØ¯Ø§Ø±Ùد.
new اجرا Ø´ÙÙØ¯Ùداشت٠this Ø¨Ù Ø·ÙØ± Ø·Ø¨ÛØ¹Û ب٠Ù
عÙÛ Ù
ØØ¯ÙØ¯ÛØª دÛÚ¯Ø±Û ÙÙ
ÙØ³Øª: تابعâÙØ§Û Ú©Ù
اÙÛ ÙÙ
ÛâØªÙØ§ÙÙØ¯ ب٠عÙÙØ§Ù Ø³Ø§Ø²ÙØ¯Ù Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙÙØ¯. Ø¢ÙâÙØ§ ÙÙ
ÛâØªÙØ§ÙÙØ¯ با new ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙÙØ¯.
ÛÚ© ØªÙØ§Ùت Ø¬Ø²Ø¦Û Ø¨ÛÙ ÛÚ© تابع Ú©Ù
اÙÛ <= Ù ÛÚ© تابع Ù
عÙ
ÙÙÛ Ú©Ù Ø¨Ø§ .bind(this) ÙØ±Ø§Ø®ÙاÙÛ Ø´Ø¯Ù ÙØ¬Ùد دارد:
.bind(this)ÛÚ© Â«ÙØ³Ø®Ù Ù¾ÛÙÙØ¯ زد٠شدÙ» از تابع را Ù ÛâØ³Ø§Ø²Ø¯.- Ú©Ù
اÙ
<=ÚÛØ²Û را Ù¾ÛÙÙØ¯ ÙÙ ÛâØ²ÙØ¯. تابع ØÙÛÙØªØ§thisÙØ¯Ø§Ø±Ø¯. جستâÙâØ¬ÙÛthisدرست ٠اÙÙØ¯ جستâÙâØ¬ÙÛ ÛÚ© Ù ØªØºÛØ± ٠ع٠ÙÙÛ Ø§ÙØ¬Ø§Ù Ù ÛâØ´ÙØ¯: در Ù ØÛØ· ÙØºÙÛ Ø¨ÛØ±ÙÙÛ.
تابعâÙØ§Û ک٠اÙÛ âargumentsâ ÙØ¯Ø§Ø±Ùد
تابعâÙØ§Û Ú©Ù
اÙÛ Ù
ØªØºÛØ± arguments ÙÙ
ÙØ¯Ø§Ø±Ùد.
زÙ
اÙÛ Ú©Ù Ø¯Ø± Ø¯Ú©ÙØ±Ø§ØªÙر Ù
ا Ø¨Ø§ÛØ¯ ÛÚ© ÙØ±Ø§Ø®ÙاÙÛ Ø±Ø§ با this Ú©ÙÙÙÛ Ù arguments ارسا٠کÙÛÙ
عاÙÛ Ø§Ø³Øª.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ defer(f, ms) ÛÚ© تابع Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯ Ù Ø¯Ø±Ø¨Ø±Ú¯ÛØ±ÙدÙâØ§Û Ø¯ÙØ± Ø¢Ù Ú©Ù ÙØ±Ø§Ø®ÙاÙÛ Ø±Ø§ Ø¨Ù Ø§ÙØ¯Ø§Ø²Ù ms Ù
ÛÙÛâØ«Ø§ÙÛÙ ØªØ§Ø®ÛØ± Ù
ÛâØ§ÙØ¯Ø§Ø²Ø¯ را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯:
function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms);
};
}
function sayHi(who) {
alert('Ø³ÙØ§Ù
Ø ' + who);
}
let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("John"); // John ØØ¨Ø¹Ø¯ از د٠ثاÙÛÙ: Ø³ÙØ§Ù
کد Ûکسا٠بدÙ٠تابع ک٠اÙÛ Ù ÛâØªÙØ§Ùد اÛÙÚ¯ÙÙ٠باشد:
function defer(f, ms) {
return function(...args) {
let ctx = this;
setTimeout(function() {
return f.apply(ctx, args);
}, ms);
};
}
اÛÙØ¬Ø§ Ù
ا Ø¨Ø§ÛØ¯ Ù
ØªØºÛØ±ÙØ§Û Ø§Ø¶Ø§ÙÛ args Ù ctx را Ø§ÛØ¬Ø§Ø¯ Ù
ÛâکردÛÙ
تا تابع درÙÙ setTimeout Ø¨ØªÙØ§Ùد Ø¢ÙâÙØ§ را Ø¯Ø±ÛØ§Ùت Ú©ÙØ¯.
Ø®ÙØ§ØµÙ
تابعâÙØ§Û ک٠اÙÛ:
- داراÛ
thisÙÛØ³ØªÙد - داراÛ
argumentsÙÛØ³ØªÙد - ÙÙ
ÛâØªÙØ§ÙÙØ¯ ÙÙ
را٠با
newÙØ±Ø§Ø®ÙاÙÛ Ø´ÙÙØ¯ - ÙÙ
ÚÙÛ٠آÙâÙØ§
superÙØ¯Ø§Ø±Ùد ا٠ا ÙÙÙØ² آ٠را ÙØ®ÙØ§ÙØ¯ÙâØ§ÛÙ . در ÙØµÙ ÙØ±Ø§Ø«Øª Ú©ÙØ§Ø³ آ٠را Ø®ÙØ§ÙÛÙ Ø®ÙØ§Ùد
ب٠دÙÛ٠اÛÙک٠آÙâÙØ§ Ø¨Ø±Ø§Û ÙØ·Ø¹ÙâÙØ§Û Ú©ÙØªØ§ÙÛ Ø§Ø² کد در ÙØ¸Ø± Ú¯Ø±ÙØªÙ شدÙâØ§ÙØ¯ ک٠«ز٠ÛÙÙ(context)» Ø®ÙØ¯Ø´Ø§Ù را ÙØ¯Ø§Ø±Ùد ٠در ز٠ÛÙÙ Ú©ÙÙÙÛ Ú©Ø§Ø± Ù ÛâÚ©ÙÙØ¯. ٠آÙâÙØ§ ÙØ§Ùعا در اÛÙ Ù ÙØ±Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ¯Ø±Ø®Ø´ÙØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)