متخصصین علوم رایانه کشور

Learning MEAN Framework
متخصصین علوم رایانه کشور

آموزش جاوا اسکریپت - توابع - قسمت اول

يكشنبه, ۱۰ آبان ۱۳۹۴، ۰۶:۲۶ ب.ظ

JavaScript Function Definitions

JavaScript functions are defined with the function keyword.


توابع جاوا اسکریپت با کلیدواژه function تعریف می شوند.


You can use a function declaration or a function expression.


شما می توانید یا از تکنیک Declaration و یا Expression برای تعاریف توابع استفاده نمایید.


Function Declarations


Functions are declared with the following syntax:

تعریف توابع به شکل ذیل را Function Declarations می گویند:

function functionName(parameters) {
  code to be executed
}

Declared functions are not executed immediately. They are "saved for later use", and will be executed later, when they are invoked (called upon).

زمانی که شما توابعی را تعریف می کنید، در همان لحظه اجرا نمی شوند. آنها صرفا برای استفاده های آتی ذخیره می گردند، زمانی اصطلاحا آنها را اجرا (Invoke) می کنید.

function myFunction(a, b) {
    return a * b;
}

Semicolons are used to separate executable JavaScript statements.
Since a function declaration is not an executable statement, it is not common to end it with a semicolon.

برای جدا کردن دستورات اجرایی جاوا اسکریپت از (;) استفاده می کنیم، ولی از آنجایی که تعریف توابع، یک دستور اجرایی محسوب نمی شود، معمولا مرسوم نیست که پس از آکولاد بسته تابع، (;) قرار دهیم.

Function Expressions

A JavaScript function can also be defined using an expression.

A function expression can be stored in a variable:

توابع می توانند به شکل Expression تعریف شوند. در این حالت (به شکل ذیل)، ما متغیری را تعریف کرده و یک تابع را به آن Assign می کنیم:


var x = function (a, b) {return a * b};


After a function expression has been stored in a variable, the variable can be used as a function:


بعد از اینکه تابع به صورت Expression تعریف گردید و ما تابع را در داخل یک متغیر (x) ذخیره کردیم، می توان از متغیر x به صورت یک تابع استفاده کرد. بدین معنی که وقتی متغیر x را فرآخوانی می کنیم، مانند این است که تابع ذخیره شده در آن را فرآخوانی می کنیم.


var x = function (a, b) {return a * b};
var z = x(43);


The function above is actually an anonymous function (a function without a name).

Functions stored in variables do not need function names. They are always invoked (called) using the variable name.

The function above ends with a semicolon because it is a part of an executable statement.

به تابعی که بدون نام، و به شکل فوق تعریف می شود، اصطلاحا Anonymous Function می گویند.

توابعی که به شکل فوق تعریف شده، و آنها را در داخل یک متغیر ذخیره می کنیم، نیازی به نام ندارند. این توابع همیشه از طریق متغیرهایی که آنها را در خود ذخیره کرده اند، اجرا (Invoke) می شوند.

دقت داشته باشید، وقتی که توابع به صورت فوق تعریف می گردند، از آنجایی که به صورت دستور اجرایی تعریف می شوند، باید پس از آکولاد بسته، (;) نوشته شود.

The Function() Constructor


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(43);


در مثال فوق، ما یک تابع به صورت 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(43);


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(43);


JavaScript functions can be used in expressions:


و گاهی نیز، می توان در یک عبارت محاسباتی، از نتایج اجرای آنها استفاده نمود:


function myFunction(a, b) {
    return a * b;
}

var x = myFunction(43) * 2;

پایان قسمت اول... با ما باشید...

مرجع:‌ http://www.W3Schools.com

  • داریوش تصدیقی

نظرات  (۲)

  • بهزاد خلیلی
  • سلام استاد
    این پست خیلی عالی بود
    من روزی 4-5 بار وبلاگ شما را چک می کنم که اگر مطلب جدیدی گذاشتید از آن بهره ببرم
    با تشکر از شما.
  • سعید شیخ الاسلامی
  • سلام استاد عزیز 
    همین مطلب امروز برام سوال بود و الان به جواب کامل رسیدم 
    خیلی ممنون 

    ارسال نظر

    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی