Javascript -hoisting

0

Dlaczego poniższy kod jest poprawny:

const before=()=>{
        console.log(after())
}
const after= props=>{
	return 4;
}

before()

A poniższy wywala błąd?

console.log(z);
const z = 4;
2

bo w 1 wszystko jest dostepne, a w 2 "z" nie istnieje gdy o nią wołasz.

3

W drugim przypadku usiłujesz odwołać się do zmiennej, której wartości jeszcze nie zdefiniowałeś.

W pierwszym przypadku tworzysz po prostu i uruchamiasz dwie funkcje:

function before() {
  console.log(after());
}

function after(props) {
  return 4;
}

before();

I odwołujesz się do nich już po ich zadeklarowaniu, ale JS najpierw wczytuje funkcje, a później dopiero wykonuje goły kod, więc poniższe też zadziała:


before();

function before() {
  console.log(after());
}

function after(props) {
  return 4;
}

Chyba, że zechcesz zadeklarować funkcje jak zmienne:

before();

var before = function() {
 console.log(after());
}

var after = function(props) {
  return 4;
}

To wtedy musisz się do nich odwoływać, po kolei, jak do zmiennych.

0

Aha dobra lol. Jak popatrzyłem na 3 przypadek to zauważyłem że before() jest na samym końcu i to od niego zaczyna się wywołanie. Dużo różnych przypadków robiłem i jakoś mi się tak bardzo pomieszało że nie zauważyłem. Sorki panowie programisty. ;0--0

3
bartek164 napisał(a):

Sorki panowie programisty. ;0--0

*ogląda się za siebie (przez oba ramiona jednocześnie)*

4

Jak już jesteśmy w temacie, to mam inną zagwozdkę, ogarnij ten kod :)

function abc() {
  console.log(x);
  console.log(x);
}

function def() {
  console.log(y);
  var y = 2;
  console.log(y);
}

x = 1;
abc();

y = 1;
def();
1
Freja Draco napisał(a):

Jak już jesteśmy w temacie, to mam inną zagwozdkę, ogarnij ten kod :)

function abc() {
  console.log(x);
  console.log(x);
}

function def() {
  console.log(y);
  var y = 2;
  console.log(y);
}

x = 1;
abc();

y = 1;
def();

Jeśli gdziekolwiek w funkcji(nawet na końcu) zainicjujesz zmienną lokalną o tej samej nazwie co globalna to cała funkcja odnosi się do lokalnej, ciekawe rozwiązanie..

1 użytkowników online, w tym zalogowanych: 0, gości: 1