کدهای درون جاوا اسکریپت function
هنگامی که “چیزی” آن را فراخوانی می کند ، اجرا می شوند.
فراخوانی عملکرد JavaScript
هنگام تعریف تابع ، کد داخل یک تابع اجرا نمی شود .
هنگام فراخوانی عملکرد ، کد داخل یک تابع اجرا می شود .
معمولاً استفاده از اصطلاح ” فراخوانی یک تابع ” به جای ” فراخوانی یک تابع ” است.
همچنین معمولاً می توان گفت “فراخوانی یک تابع” ، “شروع یک تابع” یا “اجرای یک تابع”.
در این آموزش ، ما از invoke استفاده خواهیم کرد ، زیرا یک عملکرد JavaScript را می توان بدون فراخوانی فراخوانی کرد.
فراخوانی یک عملکرد به عنوان یک عملکرد
مثال
function myFunction(a, b) { return a * b; } myFunction(10, 2); // Will return 20
عملکرد بالا به هیچ شیئی تعلق ندارد. اما در JavaScript همیشه یک شی جهانی پیش فرض وجود دارد.
در HTML شی جهانی پیش فرض خود صفحه HTML است ، بنابراین عملکرد بالا “متعلق به” صفحه HTML است.
در یک مرورگر شی صفحه پنجره مرورگر است. عملکرد فوق به طور خودکار به یک عملکرد پنجره تبدیل می شود.
myFunction () و window.myFunction () همان عملکرد است:
مثال
function myFunction(a, b) { return a * b; } window.myFunction(10, 2); // Will also return 20
این یک روش معمول برای فراخوانی عملکرد JavaScript است ، اما روش خیلی خوبی نیست.
متغیرها ، روش ها یا توابع جهانی به راحتی می توانند تعارض و اشکال نامی را در شی جهانی ایجاد کنند.
در جاوا اسکریپت ، چیزی که فراخوانی می شود this
، ابژه ای است که کد فعلی را “در اختیار دارد”.
مقدار this
، هنگامی که در یک تابع استفاده می شود ، جسمی است که “مالک” آن تابع است.
توجه داشته باشید که this
یک متغیر نیست. این یک کلمه کلیدی است. نمی توانید مقدار را تغییر دهید this
.
نکته: اطلاعات بیشتر در مورد this
کلمه کلیدی را در JS this Keyword بخوانید .
شی جهانی
هنگامی که یک تابع بدون یک شی مالک فراخوانی می شود ، مقدار آن this
شی جهانی می شود.
در یک مرورگر وب ، هدف جهانی پنجره مرورگر است.
این مثال شی پنجره را به عنوان مقدار this
:
مثال
let x = myFunction(); // x will be the window object function myFunction() { return this; }
فراخوانی یک تابع به عنوان یک تابع جهانی ، باعث می شود که مقدار این موضوع جهانی باشد.
استفاده از شی window پنجره به عنوان یک متغیر می تواند به راحتی برنامه شما را خراب کند.
فراخوانی عملکرد به عنوان یک روش
در JavaScript می توانید توابع را به عنوان متدهای شی تعریف کنید.
مثال زیر یک شی ( myObject ) ، با دو ویژگی ( firstName و lastName ) و یک متد ( fullName ) ایجاد می کند:
مثال
const myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this.firstName + " " + this.lastName; } } myObject.fullName(); // Will return "John Doe"
نام و نام خانوادگی یک تابع است. تابع متعلق به جسم است. myObject صاحب عملکرد است.
چیزی که فراخوانی می شود this
، ابژه ای است که کد JavaScript را “در اختیار دارد”. در این مورد ارزش this
است myObject .
امتحانش کن! روش fullName را تغییر دهید تا مقدار this
:
مثال
const myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this; } } // This will return [object Object] (the owner object) myObject.fullName();
فراخوانی یک تابع به عنوان یک روش شی ، باعث می شود که مقدار this
خود شی itself باشد.
فراخوانی یک عملکرد با یک سازنده عملکرد
اگر یک فراخوانی تابع با new
کلمه کلیدی مقدم باشد ، این یک فراخوان سازنده است.
به نظر می رسد که شما یک تابع جدید ایجاد کرده اید ، اما از آنجا که توابع JavaScript اشیایی هستند ، شما در واقع یک شی جدید ایجاد می کنید:
مثال
// 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
کلمه کلیدی در سازنده یک ارزش ندارد.
مقدار this
شی object جدیدی است که هنگام فراخوانی عملکرد ایجاد می شود.