ÙÙ Ø§ÙØ·Ùر Ú©Ù Ù ÛâØ¯Ø§ÙÛÙ Ø ÛÚ© تابع در Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÛÚ© Ù ÙØ¯Ø§Ø± است.
ÙØ± Ù ÙØ¯Ø§Ø±Û در Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÙÙØ¹ دارد. تابع از ÚÙ ÙÙØ¹Û استØ
در Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±ÛÙ¾ØªØ ØªØ§Ø¨Ø¹âÙØ§ Ø´ÛØ¡ ÙØ³ØªÙد.
ÛÚ© Ø±Ø§Ù Ø®ÙØ¨ Ø¨Ø±Ø§Û ØªØµÙØ± کرد٠تابعâÙØ§Ø Ùکر کرد٠ب٠آÙÙØ§ ب٠عÙÙØ§Ù Â«Ø´ÛØ¡ÙØ§Û Ø¹Ù ÙکردÛ» ÙØ§Ø¨Ù ÙØ±Ø§Ø®ÙاÙÛ Ø§Ø³Øª. ٠ا Ù٠تÙÙØ§ Ù ÛâØªÙØ§ÙÛ٠آÙÙØ§ را ÙØ±Ø§ Ø¨Ø®ÙØ§ÙÛ٠بÙÚ©Ù Ù ÛâØªÙØ§ÙÛ٠با Ø¢ÙÙØ§ ٠اÙÙØ¯ Ø´ÛØ¡Ùا Ø±ÙØªØ§Ø± Ú©ÙÛÙ : ÙÛÚÚ¯ÛâÙØ§ را اضاÙÙ/ØØ°Ù Ú©ÙÛÙ Ø Ø¢ÙÙØ§ را ØªÙØ³Ø· ٠رجع رد ٠بد٠کÙÛÙ Ù ØºÛØ±Ù.
ÙÛÚÚ¯Û ânameâ
Ø´ÛØ¡ تابعâÙØ§ ÚÙØ¯ ÙÛÚÚ¯Û ÙØ§Ø¨Ù Ø§Ø³ØªÙØ§Ø¯Ù Ø¯Ø§Ø±ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ اس٠ÛÚ© تابع با ÙÛÚÚ¯Û ânameâ ÙØ§Ø¨Ù دسترس است:
function sayHi() {
alert("Hi");
}
alert(sayHi.name); // sayHi
Ù ÙØ·Ù Ù ÙØ¯Ø§Ø±Ø¯ÙÛ Ø§Ø³Ù Ø ÙÙØ´Ù ÙØ¯Ø§ÙÙ Ù Ø¬Ø§ÙØ¨ است. ØØªÛ ز٠اÙÛ Ú©Ù ÛÚ© تابع بدÙÙ Ø§Ø³Ù Ø³Ø§Ø®ØªÙ Ù Ø³Ø±ÛØ¹Ø§ ØªØ®ØµÛØµ Ø¯Ø§Ø¯Ù Ø´ÙØ¯Ø Ø§Ø³Ù Ø¯Ø±Ø³ØªÛ Ø±Ø§ Ø¨Ø±Ø§Û Ù ÙØ¯Ø§Ø±Ø¯ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙØ¯:
let sayHi = function() {
alert("Hi");
};
alert(sayHi.name); // sayHi (!ÛÚ© اسÙ
دارد)
اگر Ù ÙØ¯Ø§Ø±Ø¯ÙÛ ØªÙØ³Ø· ÛÚ© Ù ÙØ¯Ø§Ø± Ù¾ÛØ´âÙØ±Ø¶ Ø§ÙØ¬Ø§Ù Ø´ÙØ¯ Ù٠کار Ù ÛâÚ©ÙØ¯:
function f(sayHi = function() {}) {
alert(sayHi.name); // sayHi (!کار Ù
ÛâÚ©ÙØ¯)
}
f();
در Ù Ø´Ø®ØµØ§ØªØ Ø§ÛÙ Ø®Ø§ØµÛØª «اس٠ز٠ÛÙÙâØ§Û» ÙØ§Ù ÛØ¯Ù شد٠است. اگر تابع Ø§Ø³Ù Û ÙØ¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø³Ù¾Ø³ در Ù ÙØ¯Ø§Ø±Ø¯ÙÛØ از ز٠ÛÙÙ Ù ÙØ¬Ùد Ù¾ÛØ¯Ø§ Ù ÛâØ´ÙØ¯.
Ù ØªØ¯ÙØ§Û Ø´ÛØ¡Ùا ÙÙ Ø§Ø³Ù Ø¯Ø§Ø±ÙØ¯:
let user = {
sayHi() {
// ...
},
sayBye: function() {
// ...
}
}
alert(user.sayHi.name); // sayHi
alert(user.sayBye.name); // sayBye
اگرÚÙ ÙÛÚ Ø¬Ø§Ø¯ÙÛÛ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯. Ù ÙØ§Ø±Ø¯Û ÙØ¬Ùد Ø¯Ø§Ø±ÙØ¯ ک٠راÙÛ Ø¨Ø±Ø§Û ÙÙÙ ÛØ¯Ù اس٠درست ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯. در اÛÙ ØµÙØ±ØªØ ÙÛÚÚ¯Û Ø§Ø³Ù (name) خاÙÛ Ø§Ø³ØªØ Ù Ø«Ù Ø§ÛÙØ¬Ø§:
// تابع درÙ٠آراÛ٠ساخت٠شد٠است
let arr = [function() {}];
alert( arr[0].name ); // <رشت٠خاÙÛ>
// Ù
ÙØªÙر راÙÛ Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت اسÙ
درست ÙØ¯Ø§Ø±Ø¯Ø پس ÙÛÚÛ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯
اگرÚ٠در Ø¹Ù ÙØ اکثر تابعâÙØ§ Ø§Ø³Ù Ø¯Ø§Ø±ÙØ¯.
ÙÛÚÚ¯Û â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
اÛÙØ¬Ø§ Ù ÛâØ¨ÛÙÛÙ Ú©Ù Ù¾Ø§Ø±Ø§Ù ØªØ±ÙØ§Û Ø±ÙØ³Øª ش٠رد٠ÙÙ ÛâØ´ÙÙØ¯.
ÙÛÚÚ¯Û length Ø¨Ø¹Ø¶Û Ø§ÙÙØ§Øª Ø¨Ø±Ø§Û Ø¯Ø±ÙÙâÙÚ¯Ø±Û Ø¯Ø± تابعâÙØ§ÛÛ Ú©Ù Ø¨Ø± رÙÛ ØªØ§Ø¨Ø¹âÙØ§Û دÛگر Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙÙØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ در کد Ø²ÛØ± تابع ask ÛÚ© question (Ø³ÙØ§Ù) Ø¨Ø±Ø§Û Ù¾Ø±Ø³ÛØ¯Ù Ù ØªØ¹Ø¯Ø§Ø¯Û ØªØ§Ø¨Ø¹ handler (Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù) Ø¨Ø±Ø§Û ÙØ±Ø§Ø®ÙاÙÛ Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯.
ز٠اÙÛ Ú©Ù Ú©Ø§Ø±Ø¨Ø± Ø¬ÙØ§Ø¨ Ø®ÙØ¯ را ÙØ§Ø±Ø¯ Ú©Ø±Ø¯Ø ØªØ§Ø¨Ø¹ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ را ÙØ±Ø§Ø®ÙاÙÛ Ù ÛâÚ©ÙØ¯. ٠ا Ù ÛâØªÙØ§ÙÛ٠د٠ÙÙØ¹ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù را رد Ú©ÙÛÙ :
- ÛÚ© تابع با ØµÙØ± آرگÙ٠ا٠ک٠ÙÙØ· ز٠اÙÛ Ú©Ù Ú©Ø§Ø±Ø¨Ø± ÛÚ© Ø¬ÙØ§Ø¨ ٠ثبت Ù ÛâØ¯ÙØ¯ ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯.
- ÛÚ© تابع با ÚÙØ¯ آرگÙ٠ا٠ک٠در ÙØ± Ø´Ø±Ø§ÛØ·Û ÙØ±Ø§Ø®ÙاÙÛ Ù ÛâØ´ÙØ¯ Ù ÛÚ© Ø¬ÙØ§Ø¨ بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù handler را Ø¨Ù Ø¯Ø±Ø³ØªÛ ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
Ø ÙÛÚÚ¯Û handler.length را Ø¨Ø±Ø±Ø³Û Ù
ÛâÚ©ÙÛÙ
.
Ø§ÛØ¯Ù اÛ٠است ک٠٠ا ÛÚ© سÛÙØªÚ©Ø³ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù ساد٠٠بدÙ٠آرگÙÙ Ø§Ù Ø¨Ø±Ø§Û Ù ÙØ§Ø±Ø¯ ٠ثبت دارÛÙ (ÙÙØ¹Û Ú©Ù Ø¨ÛØ´ØªØ± Ø§ØªÙØ§Ù Ù ÛâØ§ÙØªØ¯) ا٠ا Ù ÛâØªÙØ§ÙÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§Û Ú©ÙÛ Ø±Ø§ ÙÙ Ù¾ÙØ´Ø´ دÙÛÙ :
function ask(question, ...handlers) {
let isYes = confirm(question);
for(let handler of handlers) {
if (handler.length == 0) {
if (isYes) handler();
} else {
handler(isYes);
}
}
}
// Ø¨Ø±Ø§Û Ø¬ÙØ§Ø¨ Ù
Ø«Ø¨ØªØ ÙØ± Ø¯Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâØ´ÙÙØ¯
// Ø¨Ø±Ø§Û Ø¬ÙØ§Ø¨ Ù
ÙÙÛØ ÙÙØ· دÙÙ
Û
ask("Ø³ÙØ§ÙØ", () => alert('Ø´Ù
ا بÙÙ Ú¯ÙØªÛد'), result => alert(result));
اÛÙ ÛÚ© Ù
ÙØ±Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù از ÚÙØ¯Ø±ÛØ®ØªÛ Ø§Ø³Øª â Ø±Ùتار Ù
ØªÙØ§Ùت با آرگÙÙ
اÙâÙØ§ با ØªÙØ¬Ù ب٠ÙÙØ¹ Ø¢ÙÙØ§ ÛØ§ در اÛÙ Ù
ÙØ±Ø¯ Ù
ا با ØªÙØ¬Ù ب٠length. اÛÙ Ø§ÛØ¯Ù در کتابخاÙÙâÙØ§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯.
ÙÛÚÚ¯ÛâÙØ§Û Ø³ÙØ§Ø±Ø´Û
٠ا Ù ÛâØªÙØ§ÙÛÙ ÙÛÚÚ¯ÛâÙØ§ÛÛ Ø§Ø² Ø®ÙØ¯Ù ا٠را Ù٠اضاÙÙ Ú©ÙÛÙ .
اÛÙØ¬Ø§ Ù
ÛâØªÙØ§ÙÛÙ
ÙÛÚÚ¯Û counter را اضاÙÙ Ú©ÙÛÙ
تا تعداد تÙ
اÙ
ÙØ±Ø§Ø®ÙاÙÛâÙØ§ را Ù¾ÛÚ¯ÛØ±Û Ú©ÙÛÙ
:
function sayHi() {
alert("Ø³ÙØ§Ù
");
// Ø¨ÛØ§ÛÛØ¯ تعداد اجرا کرد٠را بشÙ
ارÛÙ
sayHi.counter++;
}
sayHi.counter = 0; // Ù
ÙØ¯Ø§Ø± اÙÙÛÙ
sayHi(); // Ø³ÙØ§Ù
sayHi(); // Ø³ÙØ§Ù
alert( `${sayHi.counter} بار ÙØ±Ø§Ø®ÙاÙÛ Ø´Ø¯` ); // د٠بار ÙØ±Ø§Ø®ÙاÙÛ Ø´Ø¯
ÛÚ© ÙÛÚÚ¯Û Ú©Ù Ø¨Ù ÛÚ© تابع ØªØ®ØµÛØµ Ø¯Ø§Ø¯Ù Ø´ÙØ¯ Ù
اÙÙØ¯ 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 ØØ§Ùا در Ø¨Ù ØµÙØ±Øª Ù
ستÙÛÙ
در Ø®ÙØ¯ تابع Ø°Ø®ÛØ±Ù شد٠است Ù٠در Ù
ØÛØ· ÙØºÙÛ Ø¨ÛØ±ÙÙÛ Ø¢Ù.
اÛÙ Ø±ÙØ´Ù Ø§Ø³ØªÙØ§Ø¯Ù از Ú©ÙÙÚØ± Ø¨ÙØªØ± است ÛØ§ بدترØ
ØªÙØ§Ùت اصÙÛ Ø§Û٠است ک٠اگر Ù
ÙØ¯Ø§Ø± count در ÛÚ© Ù
ØªØºÛØ± Ø¨ÛØ±ÙÙÛ ÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø³Ù¾Ø³ کد Ø¨ÛØ±ÙÙÛ ÙÙ
ÛâØªÙØ§Ùد Ø¨Ù Ø¢Ù Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯. تÙÙØ§ تابعâÙØ§Û ØªÙØ¯Ø±ØªÙ Ù
Ù
ک٠است آ٠را تغÛÛØ± دÙÙØ¯. ٠اگر ÙÙØ· ب٠ÛÚ© تابع Ù
ØªØµÙ Ø¨Ø§Ø´Ø¯Ø Ø³Ù¾Ø³ ÚÙÛÙ ÚÛØ²Û اÙ
کا٠دارد:
function makeCounter() {
function counter() {
return counter.count++;
};
counter.count = 0;
return counter;
}
let counter = makeCounter();
counter.count = 10;
alert( counter() ); // 10
پس Ø§ÙØªØ®Ø§Ø¨ ÙØÙÙ Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ø¨Ù Ø§ÙØ¯Ø§Ù ٠ا Ø¨Ø³ØªÚ¯Û Ø¯Ø§Ø±Ø¯.
Function Expression ÙØ§Ù âÚ¯Ø°Ø§Ø±Û Ø´Ø¯Ù
Function Expression ÙØ§Ù âÚ¯Ø°Ø§Ø±Û Ø´Ø¯ÙØ ÛØ§ NFEØ ÛÚ© عبارت Ø¨Ø±Ø§Û Function ExpressionÙØ§ÛÛ Ø§Ø³Øª Ú©Ù ÛÚ© Ø§Ø³Ù Ø¯Ø§Ø±ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ Ø¨ÛØ§ÛÛØ¯ ÛÚ© Function Expression ٠ع٠ÙÙÛ Ø±Ø§ ÙØ±Ø¶ Ú©ÙÛÙ :
let sayHi = function(who) {
alert(`${who} Ø³ÙØ§Ù
Ø`);
};
Ù ÛÚ© اس٠ب٠آ٠بدÙÛÙ :
let sayHi = function func(who) {
alert(`Ø³ÙØ§Ù
Ø ${who}`);
};
Ø¢ÛØ§ Ù
ا اÛÙØ¬Ø§ ÚÛØ²Û بدست Ø¢ÙØ±Ø¯ÛÙ
Ø ÙØ¯Ù اسÙ
اضاÙÛ "func" ÚÛØ³ØªØ
در ابتدا Ø¨ÛØ§ÛÛØ¯ اÛ٠را در ÙØ¸Ø± Ø¨Ú¯ÛØ±ÛÙ
Ú©Ù Ù
ا ÙÙÙØ² ÙÙ
ÛÚ© Function Expression دارÛÙ
. اضاÙ٠کرد٠اسÙ
"func" بعد از function آ٠را تبدÛ٠ب٠Function Declaration Ùکرد ÚÙÙ ÙÙÙØ² ÙÙ
ب٠عÙÙØ§Ù Ø¨Ø®Ø´Û Ø§Ø² ÛÚ© Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ø³Ø§Ø®ØªÙ Ø´Ø¯Ù Ø§Ø³Øª.
اضاÙ٠کرد٠ÚÙÛÙ Ø§Ø³Ù Û ÚÛØ²Û را خراب Ùکرد.
تابع ÙÙÙØ² ÙÙ
با sayHi() ÙØ§Ø¨Ù دسترس است:
let sayHi = function func(who) {
alert(`Ø³ÙØ§Ù
Ø ${who}`);
};
sayHi("John"); // John ØØ³ÙاÙ
د٠ÚÛØ² خاص دربار٠اسÙ
func ÙØ¬Ùد دارد ک٠دÙÛÙâÙØ§ÛÛ Ø¨Ø±Ø§Û Ø¢Ù Ø¯Ø§Ø±ÛÙ
:
- اÛ٠اس٠ب٠تابع اجاز٠٠ÛâØ¯ÙØ¯ Ú©Ù Ø¨Ù ØµÙØ±Øª درÙÙÛ Ø¨Ù Ø®ÙØ¯Ø´ Ø±Ø¬ÙØ¹ Ú©ÙØ¯.
- اÛÙ Ø§Ø³Ù Ø¨ÛØ±Ù٠از تابع ÙØ§Ø¨Ù رÙÛØª ÙÛØ³Øª.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ تابع sayHi پاÛÛ٠اگر ÙÛÚ Ù
ÙØ¯Ø§Ø±Û Ø¨Ø±Ø§Û who تعÛÛÙ ÙØ´ÙØ¯Ø Ø®ÙØ¯Ø´ را با "Guest" صدا Ù
ÛâØ²ÙØ¯:
let sayHi = function func(who) {
if (who) {
alert(`Ø³ÙØ§Ù
Ø ${who}`);
} else {
func("Guest"); // از تابع Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù Ø®ÙØ¯Ø´ را Ø¯ÙØ¨Ø§Ø±Ù صدا Ø¨Ø²ÙØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯
}
};
sayHi(); // Guest ØØ³ÙاÙ
// :اÙ
ا اÛ٠کار ÙØ®ÙØ§ÙØ¯ کرد
func(); // تعرÛÙ ÙØ´Ø¯Ù است (Ø¨ÛØ±Ù٠از تابع ÙØ§Ø¨Ù رÙÛØª ÙÛØ³Øª) func ØØ§Ø±Ùر
ÚØ±Ø§ Ù
ا از func Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÛÙ
Ø Ø´Ø§ÛØ¯ ÙÙØ· از sayHi Ø¨Ø±Ø§Û ÙØ±Ø§Ø®ÙاÙÛ ØªÙØ¯Ø±ØªÙ Ø¨Ø§ÛØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø
در ÙØ§ÙØ¹Ø Ø¯Ø± اکثر Ù ÙØ§Ø±Ø¯ ٠ا Ù ÛâØªÙØ§ÙÛ٠اÛ٠کار را Ø§ÙØ¬Ø§Ù دÙÛÙ :
let sayHi = function(who) {
if (who) {
alert(`Ø³ÙØ§Ù
Ø ${who}`);
} else {
sayHi("Guest");
}
};
Ù
شک٠اÛÙ Ú©Ø¯Ø Ø§Ù
کا٠تغÛÛØ± sayHi در کد Ø¨ÛØ±ÙÙÛ Ø§Ø³Øª. اگر تابع ب٠ÛÚ© Ù
ØªØºÛØ± دÛگر ØªØ®ØµÛØµ Ø¯Ø§Ø¯Ù Ø´ÙØ¯Ø کد Ø´Ø±ÙØ¹ Ø¨Ù Ø§ÛØ¬Ø§Ø¯ Ø§Ø±ÙØ± Ù
ÛâÚ©ÙØ¯:
let sayHi = function(who) {
if (who) {
alert(`Ø³ÙØ§Ù
Ø ${who}`);
} else {
sayHi("Guest"); // تابع ÙÛØ³Øª sayHi :Ø§Ø±ÙØ±
}
};
let welcome = sayHi;
sayHi = null;
welcome(); // !دÛگر کار ÙÙ
ÛâÚ©ÙØ¯ sayHi Ø§Ø±ÙØ±Ø ÙØ±Ø§Ø®ÙاÙÛ ØªÙØ¯Ø±ØªÙÛ
دÙÛÙ Ø¨Ø±ÙØ² Ø§Ø±ÙØ± اÛ٠است ک٠تابع sayHi را از Ù
ØÛØ· ÙØºÙÛ Ø¨ÛØ±ÙÙÛ Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯. ÙÛÚ sayHi Ù
ØÙÛ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯ پس Ù
ØªØºÛØ± Ø¨ÛØ±ÙÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯. ٠در زÙ
Ø§Ù ÙØ±Ø§Ø®ÙاÙÛ sayHi Ø¨ÛØ±ÙÙÛ Ø¨Ø±Ø§Ø¨Ø± با null است.
Ø§Ø³Ù Ø§Ø®ØªÛØ§Ø±Û ک٠٠ا Ù ÛâØªÙØ§ÙÛ٠در Function Expression ÙØ±Ø§Ø± Ù ÛâØ¯ÙÛÙ ÙØ±Ø§Ø± است ک٠دÙÛÙØ§ اÛ٠دست٠از Ù Ø´Ú©ÙØ§Øª را ØÙ Ú©ÙØ¯.
Ø¨ÛØ§ÛÛØ¯ از Ø¢Ù Ø¨Ø±Ø§Û Ø±ÙØ¹ ٠شک٠کد Ø®ÙØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ :
let sayHi = function func(who) {
if (who) {
alert(`Ø³ÙØ§Ù
Ø ${who}`);
} else {
func("Guest"); // ØØ§Ùا ÙÙ
Ù ÚÛØ² درست است
}
};
let welcome = sayHi;
sayHi = null;
welcome(); // (ÙØ±Ø§Ø®ÙاÙÛ ØªÙØ¯Ø±ØªÙ کار Ù
ÛâÚ©ÙØ¯) Guest ØØ³ÙاÙ
ØØ§Ùا کار Ù
ÛâÚ©ÙØ¯ ÚÙ٠اسÙ
"func" ÛÚ© تابع Ù
ØÙÛ Ø§Ø³Øª. اÛ٠اسÙ
از Ø¨ÛØ±ÙÙ Ø¯Ø±ÛØ§Ùت ÙÙ
ÛâØ´ÙØ¯ (Ù Ø¢ÙØ¬Ø§ ÙÙ
ÙØ§Ø¨Ù رÙÛØª ÙÛØ³Øª). Ù
شخصات زبا٠تضÙ
ÛÙ Ù
ÛâÚ©ÙØ¯ ک٠اÛ٠اسÙ
ÙÙ
ÛØ´Ù ب٠تابع Ú©ÙÙÙÛ Ø±Ø¬ÙØ¹ Ù
ÛâÚ©ÙØ¯.
کد Ø¨ÛØ±ÙÙÛ ÙÙÙØ² ÙÙ
Ù
ØªØºÛØ± sayHi ÛØ§ welcome Ø®ÙØ¯ را دارد. Ù func ÛÚ© «اسÙ
درÙÙÛ ØªØ§Ø¨Ø¹Â» Ø§Ø³ØªØ Ø¬ÙØ±Û ک٠تابع Ù
ÛâØªÙØ§ÙÙØ¯ از درÙÙ Ø®ÙØ¯Ø´ را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙØ¯.
Ø®ØµÙØµÛت «اس٠درÙÙÛ» ک٠اÛÙØ¬Ø§ ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯ ÙÙØ· Ø¨Ø±Ø§Û Function ExpessionÙØ§ ÙØ§Ø¨Ù Ø§Ø³ØªÙØ§Ø¯Ù است ÙÙ Ø¨Ø±Ø§Û Function DeclarationÙØ§. Ø¨Ø±Ø§Û Function DeclarationÙØ§Ø سÛÙØªÚ©Ø³Û Ø¨Ø±Ø§Û Ø§Ø¶Ø§Ù Ú©Ø±Ø¯Ù Ø§Ø³Ù Â«Ø¯Ø±ÙÙÛ» ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯.
بعضÛâØ§ÙÙØ§ØªØ ÙÛØ§Ø² ب٠ÛÚ© اس٠درÙÙÛ ÙØ§Ø¨ÙØ Ø¯ÙÛÙÛ Ø¨Ø±Ø§Û ÙÙØ´ØªÙ Ø¯ÙØ¨Ø§Ø±ÙâÛ ÛÚ© Function Declaration ب٠Function Expression ÙØ§Ù âگذارÛâØ´Ø¯Ù Ø§Ø³Øª.
Ø®ÙØ§ØµÙ
تابعâÙØ§ Ø´ÛØ¡ ÙØ³ØªÙد.
اÛÙØ¬Ø§ ٠ا ÙÛÚÚ¯ÛâÙØ§Û Ø¢ÙÙØ§ را Ù¾ÙØ´Ø´ دادÛÙ :
nameâ Ø§Ø³Ù تابع. Ù٠تÙÙØ§ در تعرÛÙ ÛÚ© تابع ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø Ø¨Ùک٠در Ù ÙØ¯Ø§Ø±Ø¯ÙÛâÙØ§ Ù ÙÛÚÚ¯ÛâÙØ§Û Ø´ÛØ¡ ÙÙ Ù ÙØ¬Ùد است.lengthâ ØªØ¹Ø¯Ø§Ø¯ آرگÙ٠اÙâÙØ§ در تعرÛ٠تابع. Ù¾Ø§Ø±Ø§Ù ØªØ±ÙØ§Û رست ش٠رد٠ÙÙ ÛâØ´ÙÙØ¯.
اگر ØªØ§Ø¨Ø¹Û Ø¨Ù Ø¹ÙÙØ§Ù Function Expression تعرÛÙ Ø´ÙØ¯ (Ù٠در Ø¬Ø±ÛØ§Ù اصÙÛ Ú©Ø¯)Ø Ù Ø§Ø³Ù Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø³Ù¾Ø³ ب٠آ٠ÛÚ© Function Expression ÙØ§Ù âÚ¯Ø°Ø§Ø±Û Ø´Ø¯Ù Ù ÛâÚ¯ÙÛÙØ¯. اس٠٠ÛâØªÙØ§Ùد درÙÙ Ø¢Ù Ø¨Ø±Ø§Û Ø±Ø¬ÙØ¹ Ø¨Ù Ø®ÙØ¯Ø´ Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙØ¯Ø Ù Ø«ÙØ§ Ø¨Ø±Ø§Û ÙØ±Ø§Ø®ÙاÙÛâÙØ§Û Ø¨Ø§Ø²Ú¯Ø´ØªÛ ÛØ§ ÚÙÛÙ ÚÛØ²Û.
ÙÙ ÚÙÛÙØ تابعâÙØ§ ٠٠ک٠است ÙÛÚÚ¯ÛâÙØ§Û اضاÙÛ ÙÙ Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯. تعداد Ø²ÛØ§Ø¯Û از کتابخاÙÙâÙØ§Û Ø´ÙØ§Ø®ØªÙâØ´Ø¯ÙâÛ Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت از اÛÙ Ø®Ø§ØµÛØª Ø®ÛÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÙØ¯.
Ø¢ÙÙØ§ ÛÚ© تابع «اصÙÛ» Ù
ÛâØ³Ø§Ø²ÙØ¯ ٠تعداد Ø²ÛØ§Ø¯Û از تابعââÙØ§Û «کÙ
Ú©Û» را ب٠آ٠Ù
تص٠Ù
ÛâÚ©ÙÙØ¯. Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ کتابخاÙÙ jQuery ÛÚ© تابع Ø¨Ù ÙØ§Ù
$ Ù
ÛâØ³Ø§Ø²Ø¯. کتابخاÙÙ lodash ÛÚ© تابع _ Ù
ÛâØ³Ø§Ø²Ø¯ ٠سپس ÙÛÚÚ¯ÛâÙØ§Û _.cloneØ _keyBy ٠بÙÛÙ ÙÛÚÚ¯ÛâÙØ§ را ب٠آ٠اضاÙÙ Ù
ÛâÚ©ÙØ¯ (زÙ
اÙÛ Ú©Ù Ù
ÛâØ®ÙØ§ÙÛØ¯ دربار٠آÙÙØ§ Ø¨ÛØ´ØªØ± بداÙÛØ¯Ø Ù
Ø³ØªÙØ¯Ø§Øª را ببÛÙÛØ¯). در ÙØ§ÙØ¹Ø Ø¢ÙÙØ§ اÛ٠کار را Ø¨Ø±Ø§Û Ú©Ø§ÙØ´ Ø¢ÙÙØ¯Ú¯Û ÙØ¶Ø§Û Ú¯ÙÙØ¨Ø§Ù Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙÙØ¯ تا ÛÚ© کتابخاÙÙ ÙÙØ· ÛÚ© Ù
ØªØºÛØ± Ú¯ÙÙØ¨Ø§Ù داشت٠باشد. اÛ٠باعث Ú©Ø§ÙØ´ Ø§ØØªÙ
ا٠ÙÙÙØ¹ ØªÙØ§Ùض در ÙØ§Ù
âÚ¯Ø°Ø§Ø±Û Ù
ÛâØ´ÙØ¯.
پس ÛÚ© ØªØ§Ø¨Ø¹Ø Ù ÛâØªÙØ§Ùد ØªÙØ³Ø· Ø®ÙØ¯Ø´ ÛÚ© کار Ù ÙÛØ¯ Ø§ÙØ¬Ø§Ù Ø¯ÙØ¯ Ù ÙÙ ÚÙÛÙ ÚÙØ¯ ع٠Ùکرد ٠ختÙ٠را در ÙÛÚÚ¯ÛâÙØ§ÛØ´ داشت٠باشد.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)