JavaScript Interview Questions: Panduan Lengkap Fresh Graduate & Profesional

JavaScript Interview Questions: Panduan Lengkap Fresh Graduate & Profesional

JavaScript adalah skill wajib bagi developer web modern. Baik fresh graduate maupun profesional, pertanyaan interview JavaScript bisa meliputi:

  • Dasar bahasa
  • DOM & event
  • Asynchronous programming
  • Scope & closure
  • Performance & optimasi
  • Security & best practices

Artikel ini membahas pertanyaan umum, jawaban konsep, contoh kode nyata, dan tips menjawab secara profesional.


1. Pertanyaan Dasar JavaScript

1.1 Apa itu JavaScript?

  • JavaScript adalah bahasa pemrograman client-side (dan server-side via Node.js) untuk membuat website interaktif.
  • Bisa dijalankan di browser atau server.

Tips menjawab:

  • Sebutkan bahwa JavaScript multi-paradigm: procedural, functional, object-oriented.

1.2 Perbedaan var, let, dan const

KeywordScopeReassignableHoisting
varfunctionYesHoisted, undefined
letblockYesHoisted, temporal dead zone
constblockNoHoisted, temporal dead zone

Contoh:

function testScope() {
  if(true) {
    var a = 1;
    let b = 2;
    const c = 3;
  }
  console.log(a); // 1
  console.log(b); // Error
  console.log(c); // Error
}

Tips: Sebutkan juga temporal dead zone untuk let & const.


1.3 Apa itu Hoisting?

  • Hoisting = deklarasi variabel dan fungsi diangkat ke atas scope saat compile time.
console.log(a); // undefined
var a = 5;

sayHi(); // "Hi!"
function sayHi() { console.log("Hi!"); }
  • Tips: var hoisted dengan undefined, function declaration hoisted sepenuhnya, let/const → temporal dead zone

2. Pertanyaan DOM & Event

2.1 Apa itu Event Bubbling & Capturing?

  • Bubbling: event mengalir dari child → parent
  • Capturing: event mengalir dari parent → child
parent.addEventListener('click', () => console.log('Parent'), true); // capturing
child.addEventListener('click', () => console.log('Child')); // bubbling

Tips: Sebutkan event.stopPropagation() untuk menghentikan bubbling.


2.2 Bagaimana menangani Event Delegation?

  • Gunakan satu listener di parent untuk menangani banyak child → efisien
document.getElementById('list').addEventListener('click', function(e){
    if(e.target && e.target.nodeName == 'LI'){
        console.log('Clicked: ' + e.target.textContent);
    }
});

Tips: Cocok untuk SPA / list dinamis → performance lebih baik daripada menambahkan listener di setiap child


3. Scope, Closure, dan Hoisting

3.1 Apa itu Closure?

  • Closure = fungsi mengingat scope lexical saat dibuat
  • Digunakan untuk data encapsulation / private variable
function counter() {
    let count = 0;
    return function() { count++; return count; }
}
const increment = counter();
console.log(increment()); // 1
console.log(increment()); // 2

Tips: Jelaskan kasus nyata → module pattern, private state di object


3.2 Pertanyaan Scope

for(var i=0;i<3;i++){
  setTimeout(() => console.log(i), 1000);
}
// Output: 3 3 3

Solusi menggunakan let:

for(let i=0;i<3;i++){
  setTimeout(() => console.log(i), 1000);
}
// Output: 0 1 2
  • Tips: Tunjukkan pemahaman block scope & var hoisting

4. Asynchronous JavaScript

4.1 Perbedaan Callback, Promise, Async/Await

Callback:

function fetchData(callback) { setTimeout(() => callback('Data'), 1000); }
fetchData(console.log);

Promise:

function fetchData() {
  return new Promise(resolve => setTimeout(() => resolve('Data'), 1000));
}
fetchData().then(console.log);

Async/Await:

async function getData() {
  const data = await fetchData();
  console.log(data);
}
getData();

Tips: Jelaskan error handling → .catch / try-catch


4.2 Event Loop dan Microtask / Macrotask

  • Event loop = engine JS memproses stack → queue
  • Microtask: Promise callbacks, MutationObserver
  • Macrotask: setTimeout, setInterval, I/O

Contoh:

console.log('Start');
setTimeout(() => console.log('Timeout'), 0);
Promise.resolve().then(() => console.log('Promise'));
console.log('End');
// Output: Start End Promise Timeout

Tips: Pertanyaan klasik di interview JS advance


5. JavaScript Performance & Optimization

5.1 Pertanyaan: Bagaimana optimasi JS untuk website?

  • Minify & compress JS
  • Lazy loading & code splitting
  • Optimize DOM manipulation → DocumentFragment / virtual DOM
  • Debounce/throttle event listeners
  • Memory leak prevention → clear intervals, remove event listener

5.2 Pertanyaan: Apa itu Memory Leak di JS?

  • Variabel tidak terpakai tapi masih direferensikan → heap tidak dibersihkan
  • Contoh nyata: event listener di SPA yang tidak dihapus saat navigasi
window.addEventListener('scroll', () => console.log('scrolling')); 
// tidak dihapus → memory leak

Solusi: removeEventListener saat tidak dibutuhkan


6. Advanced JS Questions

6.1 Prototype vs Class

function Person(name) { this.name = name; }
Person.prototype.greet = function() { console.log('Hi ' + this.name); }
class Person {
  constructor(name){ this.name = name; }
  greet(){ console.log('Hi ' + this.name); }
}

Tips jawaban:

  • Prototype = lebih low-level, class = syntactic sugar ES6
  • Prototype memory efficient

6.2 Hoisting Function vs Variable

foo(); // Works
function foo(){ console.log('foo'); }

bar(); // Error
var bar = function(){ console.log('bar'); }

Tips jawaban: perbedaan function declaration vs function expression


6.3 Deep Copy vs Shallow Copy

// Shallow
const a = {x:1, y:{z:2}};
const b = {...a}; 
b.y.z = 5; console.log(a.y.z); // 5

// Deep
const c = JSON.parse(JSON.stringify(a));
c.y.z = 10; console.log(a.y.z); // 5
  • Tips: Tunjukkan pengetahuan tentang reference object

6.4 Event Loop Challenge

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');

// Output: A D C B
  • Tips: jelaskan urutan eksekusi → synchronous → microtask → macrotask

7. Security & Best Practice Questions

  • Bagaimana mencegah XSS di JS? → sanitize input, escape output, CSP
  • Bagaimana mencegah CSRF? → token, SameSite cookie
  • Apa itu CORS? → mengatur domain yang diizinkan request ke API

8. Tips Jawaban untuk Fresh Graduate vs Profesional

LevelTips Jawaban
Fresh GraduateFokus pada konsep dasar → contoh kode sederhana, pahami hoisting, closure, async
ProfesionalTambahkan best practice, optimasi, security → lazy loading, memory leak, SSR/CSR, security headers
Semua LevelJangan hanya hafal jawaban → jelaskan kenapa dan kapan digunakan

9. Studi Kasus Interview Nyata

9.1 Pertanyaan SPA

“Bagaimana kamu menghindari memory leak di React/Vue SPA?”

Jawaban:

  • Bersihkan event listener saat component unmount
  • Gunakan WeakMap untuk cache sementara
  • Clear interval / timeout
  • Profiling dengan Chrome DevTools → heap snapshot

9.2 Pertanyaan Asynchronous

“Apa perbedaan Promise.all vs async/await dalam loop?”

Jawaban:

  • Promise.all → parallel → lebih cepat
  • Async/await dalam loop → serial → lebih lambat
  • Contoh kode nyata + analisis performa

10. Checklist Persiapan Interview JavaScript

  • Variabel & Scope → var/let/const, hoisting
  • DOM & Event → bubbling, capturing, delegation
  • Closure & Prototype → private state, class vs prototype
  • Asynchronous → callback, promise, async/await, event loop
  • Performance → DOM manipulation, lazy loading, memory leak
  • Security → XSS, CSRF, CORS, CSP
  • Advanced → deep vs shallow copy, function expression vs declaration
  • Framework → React/Vue optimization & SPA handling

Kesimpulan

JavaScript interview untuk fresh graduate & profesional tidak hanya menguji syntax, tapi juga:

  • Pemahaman konsep fundamental
  • Kemampuan menulis kode bersih & aman
  • Strategi optimasi performance & UX

Dengan contoh kode nyata, analisis event loop, closure, async, security, kamu akan lebih siap menghadapi technical interview modern, baik untuk frontend, fullstack, maupun Node.js backend.