‎‎بالا بردن در جاوااسكريپتJavaScript Hoisting -‎

Previous >    <Next  

‎‎در جاوااسكريپت بالا بردن تعاريف متغيرها در بالاي ميدان از رفتارهاي پيش فرض آن است.

‎JavaScript Declarations are Hoisted‎

‎‎دستورات تعاريف بالا رفته جاوااسكريپت

‎در جاوااسكريپت يك متغير ميتواند بعداز دستور استفاده تعريف شود .بعبارت ديگر متغير ميتواند ‎قبل از دستور تعريفي استفاده شود.

‎‎‎دو مثال زير داراي نتيجه يكساني دارند.

‎‎مثال 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

--(go to editor for change code and run)

‎‎مثال 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

--(go to editor for change code and run)

‎‎براي درك موضوع بايد اصلاح بالابردن‎(Hoisting)‎ مشخص شود .

‎رفتار پيش فرض بالا بردن جاوااسكريپت براي دستوراتي تعريفي، اينستكه آن درستور در ابتداي ‎ميدان جاري متغير يا تابع قرارميگيرد.

‎‎كي ورد هايlet و const

‎متغيرهاي تعريفي با‎let , const‎ در بالاي بلوك قرارداده مشوند ولي مقدار اوليه ‎نميگيرند .اين بدين معني است كه بلوك كد ازمتغير آگاه است، اما نمي تواند ازآن تا موقعيكه ‎تعريف نشده استفاده نمايد.

‎دستور‎let‎ براي تعريف متغيررا قبل از استفاده آن بكار بگيرد تا در استفاده نتيجه ‎برگشتي‎ReferecenceError‎ نداشته باشيد .

‎‎متغير از شروع بلوك تا محل تعريفش، در يك ناحيه مرده اي قراردارد.

‎‎مثال ـ اين نتيجه برگشتي‎ReferencenceError‎ را دارد .

carName = "Volvo";
let carName;

--(go to editor for change code and run)

‎استفاده متغير قبل از‎const‎ براي تعريف آن متغير، خطايSyntax ايجاد ميكند . ‎بنابراين آن بسادگي اجرا نميشود.

‎‎مثال ـ استفاده متغير قبل از كي وردlet كه اجرا نميشود .

carName = "Volvo";
const carName;

--(go to editor for change code and run)

‎براي اطلاعات بيشتر به بخشهاي JS Const ‎و JS Let ‎مراجعه فرمائيد.

‎JavaScript Initalizations are Not Hoisting‎

‎‎تعريف با مقداراوليه بالا رفتني نيست

‎‎در جاوااسكريپت فقط تعاريف متغير بدون مقدار اوليه بالا رفتني ميباشند.

‎در زير مثالهاي يك ودو داراي نتيجه مشابهي نيستند.

‎‎مثال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

--(go to editor for change code and run)

‎‎مثال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

--(go to editor for change code and run)

‎آيا نتيجه مثال دوم كهundefinded براي y است منطقي است .بله بدليل اينكه تعريف متغير y كد ‎بعداز استفاده آن است بدون گرفتن مقداراوليه‎(=7)‎ به بالا ميرود .

‎‎مثال ـ مثال دوم مطابق برنامه زير عمل ميكند.

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

--(go to editor for change code and run)

‎Declare Your Variables At the Top!‎

‎‎متغير ها را دربالا تعريف كنيد

‎تعريف متغيرها توسط توسعه دهندگان دربالا بيشتر براي رفتار هاي ناشنا خته وايجاد خطا در ‎جاوااسكريپت است.

‎براي بروز از اشكالات احتمالي هميشه تعريف متغير هارا در بالاي دامنه قرار دهيد .با اين روش ‎جاوااسكريپت مناسب ترين تفسير را براي آنها انجام ميدهد.

‎جاوااسكريپت در حالت سختگيرانه اجاز استفاده متغير تعريف نشده را نمي دهد .جهت اطلاعات بيشتر ‎از كنترل سختگيرانه جاوااسكريپت فصل بعدي را مطالعه فرمائيد.


Previous >    <Next