Было время, когда я использовал и понимал практическое использование let, const и var в JavaScript, но объяснить это словами было сложно. Если вы оказались в аналогичном затруднительном положении, ключевыми моментами, на которых следует сосредоточиться, являются различия в области действия, подъеме, повторной инициализации и переназначении.
Обзор:
function varExample() { if (true) { var x = 10; // x is function-scoped } console.log(x); // Outputs: 10 } varExample(); if (true) { var y = 20; // y is globally scoped because it's outside a function } console.log(y); // Outputs: 20
function letExample() { if (true) { let x = 10; // x is block-scoped console.log(x); // Outputs: 10 } console.log(x); // ReferenceError: x is not defined } letExample(); if (true) { let y = 20; // y is block-scoped console.log(y); // Outputs: 20 } console.log(y); // ReferenceError: y is not defined
function constExample() { if (true) { const x = 10; // x is block-scoped console.log(x); // Outputs: 10 } console.log(x); // ReferenceError: x is not defined } constExample(); if (true) { const y = 20; // y is block-scoped console.log(y); // Outputs: 20 } console.log(y); // ReferenceError: y is not defined
Подъем
Подъем похож на настройку рабочего пространства перед началом задачи. Представьте, что вы находитесь на кухне и готовитесь приготовить еду. Прежде чем начать готовить, вы кладете все ингредиенты и инструменты на стойку так, чтобы они были под рукой.
В программировании, когда вы пишете код, движок JavaScript просматривает ваш код перед его фактическим запуском и устанавливает все переменные и функции в верхней части их области видимости. Это означает, что вы можете использовать функции и переменные до того, как объявите их в своем коде.
Все три (var, let и const) действительно подняты. Однако разница заключается в том, как они инициализируются во время процесса подъема.
var поднимается и инициализируется с помощью неопределенного значения.
console.log(myVar); // Outputs: undefined var myVar = 10;
console.log(myLet); // ReferenceError: Cannot access 'myLet' before initialization let myLet = 10;
console.log(myConst); // ReferenceError: Cannot access 'myConst' before initialization const myConst = 20;
Переназначение и повторная инициализация:
var x = 10; x = 20; // Reassignment console.log(x); // Outputs: 20 var x = 30; // Reinitialization console.log(x); // Outputs: 30
let y = 10; y = 20; // Reassignment console.log(y); // Outputs: 20 let y = 30; // SyntaxError: Identifier 'y' has already been declared
const z = 10; z = 20; // TypeError: Assignment to constant variable. const z = 30; // SyntaxError: Identifier 'z' has already been declared
const obj = { a: 1 }; obj.a = 2; // Allowed, modifies the property console.log(obj.a); // Outputs: 2 obj = { a: 3 }; // TypeError: Assignment to constant variable.
const arr = [1, 2, 3]; arr[0] = 4; // Allowed, modifies the element console.log(arr); // Outputs: [4, 2, 3] arr = [5, 6, 7]; // TypeError: Assignment to constant variable.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3