Funksiyalar, scope və closure-lər
Funksiya yazmağın üç əsas yolu:
- Declaration:
function login(user) {...}— hoisting olunur (elandan əvvəl çağırıla bilər) - Expression:
const login = function(user) {...} - Arrow:
const login = (user) => {...}— qısa sintaksis, özthis-i yoxdur
Arrow funksiyalar test kodunda hər yerdədir: callback-lərdə (items.map(i => i.name)), test bloklarında (test('...', async ({ page }) => {...})).
Default parametrlər test helper-ləri üçün faydalıdır: function createUser(role = 'customer') {...}.
Scope — dəyişənin görünmə dairəsi. let/const block-scoped-dur: { } daxilində elan olunan dəyişən bayırda görünmür.
Closure — funksiyanın öz yarandığı mühitin dəyişənlərini "yadda saxlaması". Praktik istifadə: konfiqurasiya olunmuş helper yaratmaq:
Test kodunda closure-lər fixture-lərin və factory funksiyaların əsasında dayanır — məsələn, makeApiClient(baseUrl) çağırışı baseUrl-i yadda saxlayan client qaytarır.
İnterview sualı üçün qısa closure tərifi hazırla: "Closure — funksiya + onun yarandığı lexical mühit. Funksiya xarici scope-un dəyişənlərinə, hətta o scope bitəndən sonra da, çıxış saxlayır."
📚 Mənbələr və sənədlər
- Funksiyalarrəsmideveloper.mozilla.org
- Closure-lərrəsmideveloper.mozilla.org