Przejdź do treści głównej
INF.04Pytanie #767 z 856jezyk-csharp-i-platforma-dotnet

Co zostanie wyświetlone w konsoli po wykonaniu tego kodu JavaScript w trybie ścisłym ('use strict')?

Opcje odpowiedzi:
A
Hello, Alex
B
Hello,
C
Błąd ReferenceError: name is not defined
D
Błąd TypeError: Cannot read properties of undefined (reading 'name')
Prawidłowa
Reklama

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.

  1. W linii const detachedGreet = user.greet; nie wywołujemy metody, a jedynie przypisujemy samą funkcję (bez jej powiązania z obiektem user) do nowej zmiennej detachedGreet.

  2. W tym momencie detachedGreet jest zwykłą, samodzielną funkcją, która utraciła swój pierwotny kontekst – nie „pamięta”, że pochodziła z obiektu user.

  3. Kiedy wywołujemy detachedGreet(), kontekst this wewnątrz tej funkcji jest określany na nowo. Ponieważ funkcja jest wywoływana bez żadnego obiektu (nie jest to user.greet() ani obj.detachedGreet()), jej kontekst this staje się domyślny.

  4. Kluczowe jest tu użycie 'use strict';. W trybie ścisłym, gdy funkcja jest wywoływana bez kontekstu, jej this jest ustawiane na undefined. (W trybie nie-ściskim, this odwoływałoby się do obiektu globalnego window).

  5. W rezultacie, linia console.log('Hello, ' + this.name); próbuje wykonać operację 'Hello, ' + undefined.name. Próba odczytania właściwości name z wartości undefined powoduje rzucenie błędu TypeError.

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 this odwołałoby się do globalnego obiektu window, a window.name jest 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 this istnieje (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.

Rozwiąż w Quizie

Pojęcia z tego pytania

Cały słownik INF04
Reklama

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.