٥.٦ الكلمة let¶
التصريح باستخدام let¶
التمرين 1: صرّح عن متغير باسم num، واضبط قيمته على 10.
var num = 10;
console.log(num);
النتيجة هي: 10
التمرين 2: أعد تنفيذ التمرين 1، وأعد التصريح عن num باستخدام let .
let num = 10;
console.log(num);
النتيجة هي: 10
التمرين 3: ارجع إلى التمرين 2؛ أسند القيمة 20 على num .
let num = 10;
num = 20;
console.log(num);
النتيجة هي: 20
التمرين 4: صرّح عن المتغير name باستخدام let . أسند "Ali" إليه.
let name;
name = "Ali";
console.log(name);
النتيجة هي: Ali
التمرين 5: صرّح عن المتغير type باستخدام let . أسند true إليه.
let type;
type = true;
console.log(type);
النتيجة هي: true
١- let
المتغيرات المصرّح عنها باستخدام Let يمكن إعادة إسنادها.
التمرين 6: أعد التصريح عن المتغير myVar باستخدام var . أسند "hello" إليه.
var myVar = "Bye";
var myVar = "Hello";
console.log(myVar);
النتيجة هي: Hello
التمرين 7: أعد التصريح عن المتغير myVar بـ let . أسند "hello" إليه.
let myVar = "Bye";
let myVar = "Hello";
console.log(myVar);
النتيجة هي: Uncaught SyntaxError: Identifier 'myVar' has already been declared
التمرين 8: أعد التصريح عن المتغير secret بـ let . أسند "Top Secret" إليه.
let secret = "Not a secret";
let secret = "Top Secret";
console.log(secret);
النتيجة هي: Uncaught SyntaxError: Identifier 'secret' has already been declared
٢- let
المتغيرات المصرّح عنها باستخدام Let لا يمكن إعادة التصريح عنها في النطاق نفسه.
نطاق let¶
التمرين 9: اطبع قيمة myVar خارج الدالة.
function myFunc(){
var myVar = 5;
return myVar;
}
console.log(myVar);
النتيجة هي: Uncaught ReferenceError: myVar is not defined
التمرين 10: اطبع قيمة myVar خارج الدالة.
function myFunc(){
let myVar = 5;
return myVar;
}
console.log(myVar);
النتيجة هي: Uncaught ReferenceError: myVar is not defined
التمرين 11: اطبع قيمة myVar خارج القوسين المعقوفين.
{
var myVar = "I am inside a block";
}
console.log(myVar);
النتيجة هي: I am inside a block
التمرين 12: اطبع قيمة myVar خارج القوسين المعقوفين.
{
let myVar = "I am inside a block";
}
console.log(myVar);
النتيجة هي: Uncaught ReferenceError: myVar is not defined
التمرين 13: اطبع قيمة myBlockVar خارج عبارة if.
if(true){
var myBlockVar = true;
}
console.log(myBlockVar);
النتيجة هي: true
التمرين 14: اطبع قيمة myBlockVar خارج عبارة if.
if(true){
let myBlockVar = true;
}
console.log(myBlockVar);
النتيجة هي: Uncaught ReferenceError: myBlockVar is not defined
٣- let
العامل let متغيراتها ذات نطاق كتلة.
let والكائن window¶
التمرين 15: صرّح عن المتغير abc باستخدام var . اضبط قيمة abc على 1، واطبع window.abc في وحدة التحكم.
var abc;
abc = 1;
console.log(window.abc);
النتيجة هي: 1
التمرين 16: صرّح عن المتغير abc باستخدام let . اضبط قيمة abc على 1، واطبع window.abc في وحدة التحكم.
let abc;
abc = 1;
console.log(window.abc);
النتيجة هي: undefined
التمرين 17: صرّح عن المتغير greeting باستخدام var . اضبط قيمة greeting على "Hello everyone"، واطبع window.greeting في وحدة التحكم.
var greeting;
greeting = "Hello everyone";
console.log(window.greeting);
النتيجة هي: Hello everyone
التمرين 18: صرّح عن المتغير greeting باستخدام let . اضبط قيمة greeting على "Hello everyone"، واطبع window.greeting في وحدة التحكم.
let greeting;
greeting = "Hello everyone";
console.log(window.greeting);
النتيجة هي: undefined
٤- let
let لا تُنشئ خصائص على window عند التصريح بها في النطاق العام.
تهيئة let¶
التمرين 19: حاول الوصول إلى المتغير myVar قبل التصريح عنه.
console.log(myVar);
var myVar = 5;
النتيجة هي: undefined
التمرين 20: حاول الوصول إلى المتغير myVar قبل التصريح عنه.
console.log(myVar);
let myVar = 5;
النتيجة هي: Uncaught ReferenceError: Cannot access 'myVar' before initialization
٥- let
let تُهيّأ عند تنفيذ تصريحها. قبل ذلك تكون في المنطقة الميتة المؤقتة (TDZ)، فلا يمكن الوصول إليها.