Javascript -hoisting

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

Dlaczego poniższy kod jest poprawny:

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

before()

A poniższy wywala błąd?

Kopiuj
console.log(z);
const z = 4;
mr_jaro
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Grudziądz/Bydgoszcz
  • Postów: 5300
2

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

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
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:

Kopiuj
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:

Kopiuj

before();

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

function after(props) {
  return 4;
}

Chyba, że zechcesz zadeklarować funkcje jak zmienne:

Kopiuj
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.

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
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

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
3
bartek164 napisał(a):

Sorki panowie programisty. ;0--0

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

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
4

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

Kopiuj
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();
JC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
1
Freja Draco napisał(a):

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

Kopiuj
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..

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.