Przejdź do głównej zawartości

Bug #018

🪲 Znajdź buga

function sum(a, a, c) {
return a + a + c
}

console.log(sum(5, 10, 15))

Czy funkcja sum() zostanie wykonana? Jeśli tak, to jaki zwróci wynik?

🧪 Rozwiązanie

"use strict"

function sum(a, a, c) {
return a + a + c
}

console.log(sum(5, 10, 15))

W przykładzie z błędem, do konsoli zostanie zalogowany wynik 35.

Zdublowanie nazwy parametru w deklaracji funkcji prowadzi do nadpisania wartości przez ostatni nadpisujący parametr.

W naszym przypadku a + a + c z przekazanymi argumentami 5, 10, 15 prowadzi do wykonania działania 10 + 10 + 15.

Wystąpienie takiej sytuacji powinno być jednak zgłoszone przez JavaScript jako błąd składniowy.

Nie otrzymujemy jednak takiego błędu, ponieważ kod z przykładu działa w trybie nieścisłym.

Aby aktywować tryb ścisły, musimy użyć deklaracji "use strict".

Stosuje się ją na początku pliku, jeśli chcemy aktywować tryb ścisły w całym pliku, lub na początku wnętrza definiowanej funkcji, jeśli tryb ścisły ma być aktywny tylko dla danej funkcji.

Tryb ścisły jest też domyślnie aktywowany w JavaScriptowych modułach. Używając więc eksportu lub importu np. export function sum(a, a, c) też aktywujemy tryb ścisły.

Ważne: brak zgłoszonego błędu w przypadku nadpisywania parametrów funkcji to nie jedyna sytuacja, w której wykonywany kod może zachować się inaczej w zależności od aktywnego, bądź nie, trybu ścisłego.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js