Please open Telegram to view this post
VIEW IN TELEGRAM
π€£43π4π₯2
CHALLENGE
class StateMachine {
constructor() {
this.state = 'idle';
this.transitions = {
idle: { start: 'running', reset: 'idle' },
running: { pause: 'paused', stop: 'stopped' },
paused: { resume: 'running', stop: 'stopped' },
stopped: { reset: 'idle' }
};
}
transition(action) {
const nextState = this.transitions[this.state]?.[action];
if (nextState) {
this.state = nextState;
return true;
}
return false;
}
}
const sm = new StateMachine();
console.log(sm.transition('start'));
console.log(sm.state);
console.log(sm.transition('reset'));
console.log(sm.state);
β€7π2π€1
What is the output?
Anonymous Quiz
22%
true running true idle
39%
true started false started
33%
true running false running
7%
false idle true idle
β€2π2π₯2
CHALLENGE
const target = { name: 'Sarah', age: 25 };
const handler = {
get(obj, prop) {
if (prop === 'toString') {
return () => `Person: ${obj.name}`;
}
return Reflect.get(obj, prop);
},
has(obj, prop) {
return prop !== 'age' && Reflect.has(obj, prop);
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.name);
console.log('age' in proxy);
console.log(proxy.toString());
π€©3
What is the output?
Anonymous Quiz
25%
Sarah false [object Object]
41%
Sarah true [object Object]
28%
Sarah false Person: Sarah
7%
undefined false Person: Sarah
β€4π₯4π€©3π1
CHALLENGE
async function processData() {
console.log('Start');
const promise1 = new Promise(resolve => {
console.log('Promise 1 executor');
resolve('Result 1');
});
const promise2 = Promise.resolve('Result 2');
console.log('After promises created');
const result1 = await promise1;
console.log(result1);
const result2 = await promise2;
console.log(result2);
return 'Done';
}
processData().then(result => console.log(result));
What is the output?
Anonymous Quiz
37%
Start Promise 1 executor After promises created Result 1 Result 2 Done
26%
Promise 1 executor Start After promises created Result 1 Result 2 Done
18%
Start Promise 1 executor Result 1 After promises created Result 2 Done
19%
Start After promises created Promise 1 executor Result 1 Result 2 Done
β€4π1π₯1
The Chrome team has released an MCP server for Chrome DevTools, enabling agents like Claude Code or OpenAI Codex to use the DevTools to debug and analyze the performance and behavior of your webapps (or even just to automate the use of Chrome generally). Addy does a great job of explaining the potential here.
Addy Osmani
Please open Telegram to view this post
VIEW IN TELEGRAM
β€5π3π₯2
CHALLENGE
console.log('1');
Promise.resolve().then(() => {
console.log('2');
Promise.resolve().then(() => console.log('3'));
});
Promise.resolve().then(() => {
console.log('4');
});
setTimeout(() => console.log('5'), 0);
console.log('6');
β€5π4
βWeβve been busy,β says Cloudflare which recently announced itβs bringing Node.js HTTP server support to its Workers function platform. This post goes deep into the technicalities, covering what areas of the standard library is supported, how the file system works (Workers doesnβt have a typical file system), how input/output streams work, and more. And you can use all of this now.
James M Snell (Cloudflare)
Please open Telegram to view this post
VIEW IN TELEGRAM
β€7π₯3π1
CHALLENGE
function processData() {
try {
console.log('processing');
return 'success';
} catch (error) {
console.log('error caught');
return 'failed';
} finally {
console.log('cleanup');
}
}
const result = processData();
console.log('result:', result);
π₯1
What is the output?
Anonymous Quiz
13%
error caught cleanup result: failed
50%
processing cleanup result: success
20%
processing cleanup result: undefined
18%
processing result: success cleanup
β€3π2
Please open Telegram to view this post
VIEW IN TELEGRAM
π€£11β€4π1
CHALLENGE
class EventEmitter {
constructor() { this.events = {}; }
on(event, fn) { (this.events[event] ||= []).push(fn); }
emit(event, data) { this.events[event]?.forEach(fn => fn(data)); }
}
class Logger {
log(msg) { console.log(`LOG: ${msg}`); }
}
class Counter {
constructor() { this.count = 0; }
increment() { this.count++; console.log(this.count); }
}
function withLogging(target) {
const logger = new Logger();
return new Proxy(target, {
get(obj, prop) {
if (typeof obj[prop] === 'function') {
return function(...args) {
logger.log(`calling ${prop}`);
return obj[prop].apply(obj, args);
};
}
return obj[prop];
}
});
}
const emitter = withLogging(new EventEmitter());
const counter = new Counter();
emitter.on('tick', () => counter.increment());
emitter.emit('tick');
emitter.emit('tick');
π€5
What is the output?
Anonymous Quiz
17%
LOG: on LOG: emit 1 LOG: emit 2
49%
LOG: calling on 1 2 LOG: calling emit LOG: calling emit
20%
calling on calling emit 1 calling emit 2
13%
LOG: calling on LOG: calling emit 1 LOG: calling emit 2
π₯2β€1π1
CHALLENGE
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}
class Dog extends Animal {
speak() {
return super.speak() + ' and barks';
}
}
const pet = new Dog('Rex');
console.log(pet.speak());
console.log(pet instanceof Animal);
console.log(pet.constructor.name);
β€2
What is the output?
Anonymous Quiz
49%
Rex makes a sound and barks true Dog
20%
Rex barks false Dog
22%
Rex makes a sound and barks true Animal
9%
Rex makes a sound true Dog
π8π€1
Each year, Devographics runs an epic survey of as many JavaScript community members as it can and turns the results into an interesting report on the state of the ecosystem β hereβs the results from 2024. If you have the time, fill it in, especially as they format it in a way where you can actually learn about stuff as you go.
Devographics
Please open Telegram to view this post
VIEW IN TELEGRAM
π€2β€1π₯1