Kintamųjų matomumo srities niuansai if-else konstrukcijose JavaScript

Kintamųjų matomumo sritis turi tam tikrų niuansų. Pažvelkime į jį pavyzdžiu. Paskirkime mūsų sąlygos išorėje kintamąjį res su viena reikšme, o sąlygos viduje pakeiskime šią reikšmę į kitą:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // išves 2

Kaip matote, kintamasis res pasikeitė sąlygos viduje. Vis dėlto, viskas pasikeis, jei sąlygos viduje taip pat paskelbsime kintamąjį res per let:

javascriptlet res = 1;

if (true) {
  let res = 2; // paskelbsime kintamąjį per let
}

console.log(res); // išves 1, o ne 2!

Čia visa esmė ta, kad kintamojo deklaravimas per let sąlygos viduje sukūrė lokalų kintamąjį res.

Tai yra, sąlygos viduje egzistuoja vienas kintamasis res, o sąlygos išorėje - kitas. Į tai įsitikinti galima, išvedus kintamojo reikšmę į konsolę sąlygos viduje:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // išves 2
}

console.log(res); // išves 1
Задание 1

Žemiau pateikto kodo autorius norėjo atlikti amžiaus patikrinimą ar pasiekta 18 metų. Vis dėlto, kodas, esant bet kuriai amžiaus reikšmei, į konsolę išveda reikšmę undefined. Ištaisykite kodo autoriaus klaidą. Štai problematiškas kodas:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 2

Žemiau pateikto kodo autorius norėjo atlikti amžiaus patikrinimą ar pasiekta 18 metų. Patikrinus kodą paaiškėjo, kad jei amžius lygus arba didesnis nei 18 metų, tai į kintamąjį adult įrašoma true, kaip ir turi būti, tačiau, jei amžius mažesnis nei 18, tai kintamasis adult turi reikšmę undefined. Ištaisykite kodo autoriaus klaidą.

Štai problematiškas kodas:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 3

Žemiau pateikto kodo autorius norėjo atlikti amžiaus patikrinimą. Vis dėlto, kodas, esant bet kuriai amžiaus reikšmei, į konsolę išveda reikšmę undefined. Ištaisykite kodo autoriaus klaidą.

Štai problematiškas kodas:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = 'nuo 18 iki 23';
  } else {
    let res = 'daugiau nei 23';
  }
} else {
  let res = 'mažiau nei 18';
}

console.log(res);
Задание 4

Žemiau pateikto kodo autorius norėjo atlikti amžiaus patikrinimą. Vis dėlto, kodas, esant amžiaus reikšmei didesnei nei 18 metų, į konsolę išveda reikšmę undefined. Ištaisykite kodo autoriaus klaidą.

Štai problematiškas kodas:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = 'nuo 18 iki 23';
  } else {
    res = 'daugiau nei 23';
  }
} else {
  res = 'mažiau nei 18';
}

console.log(res);