As you have seen in the previous examples, JavaScript functions are defined with the function keyword.
Functions can also be defined with a built-in JavaScript function constructor called Function().
همچنانکه در مثال های قبل ملاحظه کردید، توابع جاوا اسکریپت با کلید واژه function تعریف می شوند.
توابع همچنین می توانند توسط یک تابع سازنده از پیش تعریف شده به نام ()Function نیز تعریف شوند. بدین صورت که آخرین پارامتر آن کد تابع و پارامترهای قبلی آن به عنوان پارامترهای ورودی معرفی می شوند.
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
در مثال فوق، ما یک تابع به صورت anonymous و expression و با استفاده از تابع Function تعریف کرده ایم.
You actually don't have to use the function constructor. The example above is the same as writing:
عملا شما مجبور به استفاده از Function Constructor نمی باشید. مثال فوق دقیقا با مثال ذیل معادل می باشد:
var myFunction = function (a, b) {return a * b};
var x = myFunction(4, 3);
Most of the time, you can avoid using the new keyword in JavaScript.
در اکثر مواقع، شما می توانید از کلید واژه new، در جاوا اسکریپت، اجتناب نمایید.
Function Hoisting
JavaScript functions can be called before they are declared:
به طور خلاصه، مفهوم Hoisting آن است که، شما می توانید تابعی را تعریف کرده و بر خلاف اکثر زبان های برنامه نویسی! قبل از جایی که تابع مربوطه را تعریف کرده اید، از آن تابع استفاده کرده و آنرا اجرا نمایید.:
myFunction(5);
function myFunction(y) {
return y * y;
}
Functions defined using an expression are not hoisted.
دقت داشته باشید، توابعی که به صورت Expression تعریف می شوند، یعنی توابعی که در داخل یک متغیر ذخیره می گردند، نمی توانند به صورت Hoisted مورد استفاده قرار گیرند. یعنی در صورتی که تابعی را به صورت Expression تعریف کرده باشید، نمی توانید متغیر مربوط به تابع مربوطه را، قبل از محل تعریف آن، استفاده نمایید، در این حالت تابع مربوطه اجرا نخواهد شد!
Self-Invoking Functions
Function expressions can be made "self-invoking".
A self-invoking expression is invoked (started) automatically, without being called.
Function expressions will execute automatically if the expression is followed by ().
You cannot self-invoke a function declaration.
You have to add parentheses around the function to indicate that it is a function expression:
در زبان جاوا اسکریپت، می توان به گونه ای تابعی را تعریف نمود که پس از تعریف آن، به طور خودکار اجرا شود. به این دسته از توابع Self-Invoking Functions می گویند.
اینگونه توابع، بدون اینکه نیازی باشد که در خط دیگری در سورس کد، آنها را اجرا نماییم، به طور خودکار اجرا می شوند.
اگر بعد از آکولاد بسته توابع، از دو پرانتز باز و بسته () استفاده شود، این توابع به صورت Self-Invoking Function عمل می کنند.
دقت داشته باشید که اگر صرفا پس از آکولاد بسته تابع، از () استفاده نمایید، با خطا مواجه خواهید شد! لذا باید ابتدا خود تابع را بین پرانتز باز و بسته قرار داده و پس از آن، از () استفاده نمایید.
(function () {
var x = "Hello!!"; // I will invoke myself
})();
لازم به ذکر است که به توصیه Crockford، بهتر است بعد از آکولاد بسته تابع، () را نوشته و سپس تابع و () را با هم، درون یک () دیگر قرار دهید:
// Crockford Recommandation!
(function () {
var x = "Hello!!"; // I will invoke myself
}());
The function above is actually an anonymous self-invoking function (function without name).
اصطلاحا به تابعی که به شکل فوق تعریف می شوند، Anonymous self-invoking function اطلاق می شود. دقت داشته باشید که معمولا در این حالت نام تابع نوشته نمی شود!
Functions Can Be Used as Values
JavaScript functions can be used as values:
در زبان جاوا اسکریپت، گاهی اجرای توابع، به عنوان مقدار، مورد استفاده قرار می گیرند:
function myFunction(a, b) {
return a * b;
}
var x = myFunction(4, 3);
JavaScript functions can be used in expressions:
و گاهی نیز، می توان در یک عبارت محاسباتی، از نتایج اجرای آنها استفاده نمود:
function myFunction(a, b) {
return a * b;
}
var x = myFunction(4, 3) * 2;
پایان قسمت اول... با ما باشید...
مرجع: http://www.W3Schools.com