Co zostanie wyświetlone w konsoli po wykonaniu tego kodu JavaScript w trybie ścisłym ('use strict')?
Co zostanie wyświetlone w konsoli po wykonaniu tego kodu JavaScript w trybie ścisłym ('use strict')?
Wyjaśnienie i uzasadnienie dydaktyczne
Poprawna odpowiedź: D
Uzasadnienie i szersze wyjaśnienie:
To pytanie testuje zaawansowane zrozumienie kontekstu this w języku JavaScript, zwłaszcza w połączeniu z trybem ścisłym.
W linii
const detachedGreet = user.greet;nie wywołujemy metody, a jedynie przypisujemy samą funkcję (bez jej powiązania z obiektemuser) do nowej zmiennejdetachedGreet.W tym momencie
detachedGreetjest zwykłą, samodzielną funkcją, która utraciła swój pierwotny kontekst – nie „pamięta”, że pochodziła z obiektuuser.Kiedy wywołujemy
detachedGreet(), kontekstthiswewnątrz tej funkcji jest określany na nowo. Ponieważ funkcja jest wywoływana bez żadnego obiektu (nie jest touser.greet()aniobj.detachedGreet()), jej kontekstthisstaje się domyślny.Kluczowe jest tu użycie
'use strict';. W trybie ścisłym, gdy funkcja jest wywoływana bez kontekstu, jejthisjest ustawiane naundefined. (W trybie nie-ściskim,thisodwoływałoby się do obiektu globalnegowindow).W rezultacie, linia
console.log('Hello, ' + this.name);próbuje wykonać operację'Hello, ' + undefined.name. Próba odczytania właściwościnamez wartościundefinedpowoduje rzucenie błęduTypeError.
Dlaczego pozostałe odpowiedzi są nieprawidłowe?
- A. Hello, Alex: Ta odpowiedź byłaby poprawna, gdyby funkcja została wywołana w kontekście obiektu
user, np.user.greet(). W naszym przypadku kontekst został utracony. - B. Hello, : Taki wynik (lub podobny) mógłby wystąpić w trybie nie-ściskim, gdzie
thisodwołałoby się do globalnego obiektuwindow, awindow.namejest zazwyczaj pustym ciągiem znaków. - C. Błąd ReferenceError: Ten błąd wystąpiłby, gdybyśmy próbowali odwołać się do nieistniejącej zmiennej. W tym przypadku zmienna
thisistnieje (ma wartośćundefined), problemem jest próba odczytania jej właściwości.
Chcesz poćwiczyć całą kwalifikację INF.04?
Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.
Pojęcia z tego pytania
- Język programowania JavaW pełni obiektowy język programowania kompilowany do kodu bajtowego (bytecode), wykonywanego przez Wirtualną Maszynę Javy (JVM) zgodnie z regułą WORA ('Napisz raz, uruchamiaj wszędzie').
- Zmienne i Stałe w programowaniuNazwane obszary pamięci operacyjnej przechowujące dane robocze programu; zmienne pozwalają na modyfikację wartości podczas działania, podczas gdy stałe mają wartość niezmienną.
- Funkcje, Metody i Przekazywanie ParametrówWydzielone, nazwane bloki kodu realizujące określone zadanie, przyjmujące parametry wejściowe i opcjonalnie zwracające wartość wyniku za pomocą instrukcji return.
Podobne pytania z działu „Jezyk csharp i platforma dotnet”
Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 13 pytań z tego działu.