كد داخل تابع جاوااسكريپت زماني اجرا ميشود كه، چيزي آنرا فراخواني كند.
كد داخل تابع جاوااسكريپت هنگاميكه تعريف ميشود، اجرا نميگردد .آن هنگاميكه فراخوان ميشود باجرا در مي آيد.
معمولا بجاي فراخواني تابع(invoke a function) صدا زدن تابع (call a function)استفاده ميشود .در زبانهاي برنامه نويسي صدا زدن تابع بيشتر استفاده ميشود.
اصلاح صدا زدن تابع(call function) يعني شروع تابع ويا باجرا درآمدن آنست .
درارائه مطالب جاوااسكريپت استفاده فراخوان(invoke) استفاده ميشود، چون در جاوااسكريپت ،تابع بدون صدازدن هم ميتواند اجرا شود .فراخواني بدين معني كه تابع در يك عبارتي ظاهر شود ويا يك فراخوان داشته باشد.
مثال ـ تابع زير بدون فراخوان اجرا ميشود.
function myFunction(a, b) { return a * b; } myFunction(10, 2);
تابع فوق به هيچ شئي تعلق ندارد .اما درجاوااسكريپت هميشه يك شئ جهاني پيش فرض وجود دارد.
درHTML شئ جهاني پيش فرض خود صفحه HTML است .بنابراين تابع فوق به صفحه HTML متعلق است .
در يك مرورگرشئي صفحه، پنجره مرورگراست .تابع بالا بصورت خودكاربيك تابع پنجره تبديل ميشود.
نكته ـ اين يك روش رايج براي فراخواني يك تابع جاوااسكريپت است، اما روش خيلي خوبي نيست. متغيرهاي سراسري، متدها يا توابع به راحتي ميتوانندتضاد نام واشكالات در شئ سراسري ايجاد كنند
مثال ـ دراين مثالmyfunction() وwindow.myfunction( ) دو تابع مشابه هستند.
function myFunction(a, b) { return a * b; } window.myFunction(10, 2); // Will also return 20
در جاوااسكريت كي وردthis بيك شئ اشاره دارد .كدام شئ ، بستگي به نحوي فراخواني يا استفاده دارد.
كي وردthis باشياء مختلف وابسته به استفاده ، اشاره ميكند .مطابق زير :
توجه ـthis متغير نيست، آن يك كلمه رزرو شده است .نميتوان مقدارآن را تغييرداد .
در موردthis در بحش JavaScript this اطلاعات كاملتري را مطالعه فرمائيد.
هنگاميكه تابعي بدون شئ مالكي فراخوان ميشود، كي وردthis در تابع به شئي سراسري اشاره دارد .در يك مرورگر وب ويندوي آن(window) شئ سراسري است .
مثال ـ در مثال زيرمقدارthis همان[object Window] است.
let x = myFunction(); // x will be the window object function myFunction() { return this; }
فراخواني يك تابع به عنوان تابعي سراسري ، باعث ميشود كه مقدارthis برابر شئ سراسري باشد، يا بعبارتي به شئ سراسري اشاره ميكند.
استفاده از شئ پنجره(Window object) به عنوان يك متغير ممكن است برنامه شمارا خراب كند.
در جاوااسكريپت ميتوان تابع را بعنوان متد شئي تعريف نمود.
مثال ـ دراين مثال شئmyObject با دو ويژگيfirstName, lastNane و متدfullName ايجاد مي شود .
const myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this.firstName + " " + this.lastName; } } myObject.fullName(); // Will return "John Doe"
متدfullName يك تابع است، كه اين تابع متعلق به شئmyObject است .يعني شئ فوق مالك تابع fullNameاست .
در اين متد(fullName) كي وردthis به مالك متد يعني شئ myObject اشاره دارد.
مثال را امتحان كنيد ، با تغيير در متد بنحوي كه مقدارthis را برگشت ميدهد. مطابق زير:
const myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this; } } // This will return [object Object] (the owner object) myObject.fullName();
فراخواني يك تابع بعنوان متد شئ ، باعث ميشود كه مقدارthis خود شئ باشد.
اگر قبل از فراخواني تابعي كلمهnew قرار داشته باشد، آن تابع سازنده است.اين به نظر ميرسد كه تابعي ايجاد ميكنيد، اما چون توابع جاوااسگريپت شئ هستند، يك شئ جديد ايجاد ميكنيد.
مثال ـ ايجاد شئ با تابع سازنده
// This is a function constructor: function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } // This creates a new object const myObj = new myFunction("John", "Doe"); // This will return "John" myObj.firstName;
در فراحواني يك تابع سازنده شئ جديدي ايجاد ميشود .شئ جديد ويژگي ها ومتدهايش را از تابع سازنده بارث ميبرد.
كي وردthis در تابع سازنده داراي مقدار نيست .مقدار آن شئ جديدي است كه هنگام فراخواني تابع ايجاد ميشود.