JavaScript:Hoisting یا جا به جایی کدها در جاوااسکریپت

از ویکی کد
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

https://www.w3schools.com/js/js_hoisting.asp

JavaScript Hoisting

Hosit یا جا به جایی کد ها در جاوا اسکریپت

Hoisting is JavaScript's default behavior of moving declarations to the top.

Hositing  رفتار پیشفرض جاوا اسکریپت برای جا به جایی تعاریف به بالای صفحه است.

JavaScript Declarations are Hoisted

تعاریف در جاوا اسکریپت در بالای صفحه قرار می گیرند.

In JavaScript, a variable can be declared after it has been used.

در جاوا اسکریپت ، یک متغیر را می توان بعد از اینکه از آن استفاده شد ، تعریف کرد .

In other words; a variable can be used before it has been declared.

به معنای دیگر ، یک متغیر را می توان قبل از تعریف شدن استفاده کرد .

Example 1 gives the same result as Example 2:

مثال شماره یک نتیجه مشابه مثال شماره دو دارد :

Example 1

x = 5; // Assign 5 to x


elem = document.getElementById("demo"); // Find an element

elem.innerHTML = x;                    // Display x in the element


var x; // Declare x

Example 2

var x; // Declare x

x = 5; // Assign 5 to x


elem = document.getElementById("demo"); // Find an element

elem.innerHTML = x;                    // Display x in the element

To understand this, you have to understand the term "hoisting".

برای درک این مطلب شما می بایست قوانین "hositing"  را بدانید .

Hoisting is JavaScript's default behavior of moving all declarations to the top of the current scope (to the top of the current script or the current function).

Hositing رفتار پیشفرض جاوا اسکریپت برای جا به جایی تعاریف ها به بالای scope  (بالای اسکریپت و یا تابع جاری) است.

The let and const Keywords

کلمه کلیدی let وConst

Variables and constants declared with let or const are not hoisted!

متغیرها و ثابتهایی که با کلمات let ویا const تعریف شده باشند ، جا به جا نمی شوند .

Read more about let and const in JS Let / Const.

مطالب بیشتری را می توانید در مقاله مربوط به کلمات کلیدی let و Const بخوانید .

JavaScript Initializations are Not Hoisted

مقدار دهی ها در جاوا اسکریپت جا به جا نمی شوند

JavaScript only hoists declarations, not initializations.

جاوا اسکریپت تنها تعاریفی را جا به جا می کند که مقدار دهی یا initialize نشده باشند .

Example 1 does not give the same result as Example 2:

مثال یک نتیجه مشابهی نسبت به مثال دو ندارد :

Example 1

var x = 5; // Initialize x

var y = 7; // Initialize y


elem = document.getElementById("demo"); // Find an element

elem.innerHTML = x + " " + y;           // Display x and y

Example 2

var x = 5; // Initialize x


elem = document.getElementById("demo"); // Find an element

elem.innerHTML = x + " " + y;           // Display x and y


var y = 7; // Initialize y

Does it make sense that y is undefined in the last example?

آیا اینطور به نظر می رسد که متغیر y در آخرین مثال تعریف نشده و یا undefined است ؟

This is because only the declaration (var y), not the initialization (=7) is hoisted to the top.

این تنها به خاطر تعریف (متغیر y یا var y) است که در بالای صفحه مقدار دهی نشده است .

Because of hoisting, y has been declared before it is used, but because initializations are not hoisted, the value of y is undefined.

به خاطر ویژگی hositing ، متغیر y قبل از استفاده از آن تعریف شده است ، اما چون مقدار دهی ها جا به جا یا hositing نمی شوند ، مقدار متغیر y تعریف نشده یا undefined است .

Example 2 is the same as writing:

مثال شماره 2 همانند مثال زیر است:

Example

var x = 5; // Initialize x

var y;     // Declare y


elem = document.getElementById("demo"); // Find an element

elem.innerHTML = x + " " + y;           // Display x and y


y = 7;   // Assign 7 to y

Declare Your Variables At the Top !

متغیر های خود را در بالای Scope تعریف کنید !

Hoisting is (to many developers) an unknown or overlooked behavior of JavaScript.

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

If a developer doesn't understand hoisting, programs may contain bugs (errors).

اگر یک توسعه دهنده مفهوم hositing را نداند ، برنامه او ممکن است باگ (خطا) داشته باشد.

To avoid bugs, always declare all variables at the beginning of every scope.

برای جلوگیری از ایجاد باگ ها ، همیشه تمامی متغیرها را در ابتدای هر Scope تعریف کنید .

Since this is how JavaScript interprets the code, it is always a good rule.

از انجایی که این روش مطابق روشی است که جاوا اسکریپت کد را تفسیر می کند ، پس قانون خوبی است.

JavaScript in strict mode does not allow variables to be used if they are not declared.

جاوا اسکریپت در مد سخت گیرانه به شما اجازه نمی دهد که از متغیری که تعریف نشده استفاده کنید.

Study "use strict" in the next chapter.

در مورد "use strict" در فصل بعدی بخوانید .