Master ES6+ features including async/await, destructuring, spread operators, arrow functions, promises, modules, iterators, generators, and functional programming patterns for writing clean, efficient JavaScript code. Use when refactoring legacy code, implementing modern patterns, or optimizing JavaScript applications.
Comprehensive guide for mastering modern JavaScript (ES6+) features, functional programming patterns, and best practices for writing clean, maintainable, and performant code.
// Concise syntax
const add = (a, b) => a + b;
const double = x => x * 2;
// Lexical 'this' binding
class Counter {
constructor() {
this.count = 0;
}
increment = () => {
this.count++; // 'this' refers to Counter instance
};
}
See detailed patterns: Arrow Functions & Syntax
// Object destructuring
const { name, email } = user;
const { address: { city } } = user; // Nested
// Array destructuring
const [first, second, ...rest] = numbers;
[a, b] = [b, a]; // Swap variables
// Function parameters
function greet({ name, age = 18 }) {
console.log(`Hello ${name}, you are ${age}`);
}
See detailed patterns: Destructuring Patterns
// Spread operator
const combined = [...arr1, ...arr2];
const settings = { ...defaults, ...userPrefs };
// Rest parameters
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
See detailed patterns: Spread & Rest
// Creating promises
const fetchUser = (id) => {
return new Promise((resolve, reject) => {
// Async operation
if (success) resolve(data);
else reject(error);
});
};
// Promise combinators
Promise.all([p1, p2, p3]) // All must succeed
Promise.allSettled([p1, p2]) // Wait for all
Promise.race([p1, p2]) // First to complete
Promise.any([p1, p2]) // First to succeed
See detailed patterns: Promises & Async
async function fetchUserData(id) {
try {
const user = await fetchUser(id);
const posts = await fetchUserPosts(user.id);
return { user, posts };
} catch (error) {
console.error('Error:', error);
throw error;
}
}
// Parallel execution
const [user1, user2] = await Promise.all([
fetchUser(1),
fetchUser(2)
]);
See detailed patterns: Async/Await Patterns
// Transform, filter, reduce
const names = users.map(u => u.name);
const active = users.filter(u => u.active);
const total = numbers.reduce((sum, n) => sum + n, 0);
// Advanced methods
const user = users.find(u => u.id === 2);
const hasActive = users.some(u => u.active);
const allAdults = users.every(u => u.age >= 18);
See detailed patterns: Functional Programming
// Currying
const multiply = a => b => a * b;
const double = multiply(2);
// Composition
const pipe = (...fns) => x =>
fns.reduce((acc, fn) => fn(acc), x);
const processUser = pipe(
trimName,
lowercaseEmail,
parseAge
);
See detailed patterns: Higher-Order Functions
const greeting = `Hello, ${name}!`;
const html = `
<div>
<h1>${title}</h1>
<p>${content}</p>
</div>
`;
// Tagged templates
const highlighted = highlight`Name: ${name}, Age: ${age}`;
// Optional chaining
const city = user?.address?.city;
const result = obj.method?.();
// Nullish coalescing
const value = input ?? 'default';
const name = user?.name ?? 'Anonymous';
See detailed patterns: Modern Operators
// Modern class syntax
class User {
#password; // Private field
static count = 0;
constructor(name) {
this.name = name;
}
get displayName() {
return this.name.toUpperCase();
}
}
// ES6 Modules
export const PI = 3.14159;
export default function multiply(a, b) {
return a * b;
}
import multiply, { PI } from './math.js';
See detailed patterns: Classes & Modules
// Generator function
function* rangeGenerator(from, to) {
for (let i = from; i <= to; i++) {
yield i;
}
}
// Async generator
async function* fetchPages(url) {
let page = 1;
while (true) {
const data = await fetch(`${url}?page=${page}`);
if (data.length === 0) break;
yield data;
page++;
}
}
for await (const page of fetchPages('/api/users')) {
console.log(page);
}
See detailed patterns: Iterators & Generators
// Debounce
function debounce(fn, delay) {
let timeoutId;
return (...args) => {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => fn(...args), delay);
};
}
// Throttle
function throttle(fn, limit) {
let inThrottle;
return (...args) => {
if (!inThrottle) {
fn(...args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}
See detailed patterns: Performance Optimization
npx skills add lifangda/modern-javascript-patterns下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer