تعلم جافا سكريبت 2023 #067_Global Scope & Local
قبل أيكما سكريبت ES6 (2015), كانت جافا سكريبت لديها فقط “Global Scope and Function Scope“. قدمت ES6 كلمتان جديدتان على جافا سكريبت هما let and const, هاتان الكلمتان قدمتا لـ جافا سكريبت Block Scope.
function scope vs block scope JavaScript
نطاق القالب block scope js
المتغيرات المعلنة داخل البلوك, لا يمكن الوصول إليها من خارج البلوك:
“Variables declared inside a { } block cannot be accessed from outside the block:”
مثال
{
let x = 2;
}
// x can NOT be used here
****************************************
Variables declared with the var keyword can NOT have block scope.
المتغيرات المعلنة بـ var, لا يمكن استخدامها كا نطاق للقالب “JavaScript Block Scope“
وأيضا المتغيرات المعلنة بـ var داخل البلوك, يمكن استخدامها من خارج البلوك.
مثال
{
var x = 2;
}
// x CAN be used here
*******************************************
النطاق المحلي local scope javascript
ومعناه هنا أن المتغير المعلن داخل البلوك لا يمكن استخدامه من خارج البلوك
Variables declared within a JavaScript function, become LOCAL to the function.
Function Scope
function myFunction() {
var carName = "Volvo"; // Function Scope
}
function myFunction() {
let carName = "Volvo"; // Function Scope
}
function myFunction() {
const carName = "Volvo"; // Function Scope
}
سوف نقوم في المثال التالي بعمل Function Scope لا يمكن استخدامه من خارج البلوك
مثال
// code here can NOT use carName
function myFunction() {
let carName = "Volvo";
// code here CAN use carName
}
// code here can NOT use carName
Local variables have Function Scope:
في المثال السابق :
متغير محلي داخل” Function Scope “, ولا يمكن الوصول اليه إلا من داخل بلوك الـ Function
المتغير المعلن عنه خارج البلوك, يصبح متغير عام, ويمكن استخدامه من أي مكان.
مثال
let carName = "Volvo";
// code here can use carName
function myFunction() {
// code here can also use carName
}
****************************************
في المثال السابق :
1- قمنا بالإعلان عن متغير عام “carName “, ولذلك يمكن استخدامه من أي مكان.
2- قمنا بعمل Function, وبداخله يمكنك استخدام المتغير العام أيضاً “carName “.
مثال أخر على استخدام المتغير العام :
Using Globle variables
var a = 1;
let b = 2;
function showText (){ // Using local variables
console.log(`Function - From Globle ${a}`); // Function - From Globle 1
console.log(`Function - From Globle ${b}`); // Function - From Globle 2
}
console.log(`From Globle ${a}`); // Function - From Globle 1
console.log(`From Globle ${b}`); // Function - From Globle 2
showText();
****************************************
في المثال السابق:
1- هناك متغيرات عامة (a = 1, b = 2) يمكن استخدامهم من أي مكان.
2- هناك Function لا يوجد بها متغيرات, ونريد الطباعة بنفس قيم المتغيرات العامة. لذلك تم استخدمها.
مثال على استخدام النطاق المحلى داخل Function
Using Globle variables
var a = 1;
let b = 2;
function showText (){ // Using local variables
var a = 10;
let b = 20;
console.log(`Function - From local ${a}`);
console.log(`Function - From local ${b}`);
}
console.log(`From Globle ${a}`);
console.log(`From Globle ${b}`);
showText();
****************************************
في المثال السابق :
استخدمنا متغيرات داخل الـ Function Block, لها نفس أسم المتغير العام, ومع ذلك أخد الـFunction المتغير المحلي (Local Scope) بقيم (a = 10, b = 20) لأنه موجود ولا يحتاج غيره.
في نفس الوقت فأن الكود الخارجي استخدم المتغيرات العامة (Global Scope) بقيم (a = 1, b = 2) .
المتغيرات العامة لها نطاق عام, كل (Scripts and Functions) في صفحة الويب لها وصول لهذه المتغيرات.
المتغيرات في الجافا سكريبت
في جاقا سكريبت تعتبر (objects and functions) هم أيضاً متغيرات.
يحدد النطاق إمكانية الوصول إلي المتغيرات والكائنات والوظائف من أجزاء مختلفة من الكود.
****************************************
المتغيرات العامة التلقائية Automatically Global
ّإذا قمت بربط قيمة ب متغير لم تقم بالأعلام عنة, فأنه يصبح تلقائياً متغير عام (Global Scope).
This code example will declare a global variable carName, even if the value is assigned inside a function.
في المثال التالي:
في النطاق العام سوف نقوم باستخدام متغير داخل Function لم نقم بالإعلان عنه, وسوف يتم التعامل معه على أنه متغير عام.
myFunction();
// code here can use carName
function myFunction() {
carName = "Volvo";
}