๐ แกแแกแแแก แแแแแ
แกแฌแแแแแก แแแแแแแ:
- JavaScript-แแก แคแฃแแฅแชแแแแแก แกแฎแแแแแกแฎแแ แกแแฎแแก แแแแแแ
- Scope-แแก แชแแแแแก แแแฃแคแแแแ
- Closures-แแก แแแแแงแแแแแ
- ES6+ แแแแแแแแ แแแ แคแฃแแฅแชแแแแแก แจแแกแฌแแแแ
- Destructuring-แแก แขแแฅแแแแแแ
- Modular JavaScript-แแก แกแแคแฃแซแแแแแ
โฑ๏ธ แกแแกแแแก แฎแแแแ แซแแแแแแ: 2.5 แกแแแแ
๐ แฃแแแ -แฉแแแแแแ: Intermediate JavaScript Programming
๐ง แแแกแขแ แฃแแแแขแแแ: VS Code, Browser DevTools, Node.js
๐
แกแแกแแแก แแแแ แแแ:
- 00:00-00:30 - แคแฃแแฅแชแแแแแก แกแแฎแแแแ แแ Scope
- 00:30-01:00 - Lexical Scope แแ Closures
- 01:00-01:15 - โ Break
- 01:15-02:00 - ES6+ Features (Rest, Spread, Destructuring)
- 02:00-02:30 - Modules แแ แแ แแฅแขแแแฃแแ แแแ แฏแแจแแแ
๐ง แคแฃแแฅแชแแแแแก แกแแฎแแแแ
JavaScript-แจแ แคแฃแแฅแชแแแแแก 3 แแแแแแ แ แกแแฎแ:
- Function Declaration - แคแฃแแฅแชแแแก แแแแแชแฎแแแแแ
- Function Expression - แคแฃแแฅแชแแแก แแแแแกแแฎแฃแแแแ
- Arrow Function - แแกแ แแกแแแ แ แคแฃแแฅแชแแ (ES6)
1๏ธโฃ Function Declaration
// Function Declaration
function greetUser(name) {
return `Hello, ${name}!`;
}
// แคแฃแแฅแชแแแก แแแแแซแแฎแแแ แแแแแชแฎแแแแแแแแแช แจแแแซแแแแ (Hoisting)
console.log(sayHi()); // "Hi there!"
function sayHi() {
return "Hi there!";
}
2๏ธโฃ Function Expression
// Function Expression
const [sum, difference, product, quotient] = calculate(10, 5);
console.log(`Sum: ${sum}, Difference: ${difference}`);
// Sum: 15, Difference: 5
// Nested arrays
const matrix = [[1, 2], [3, 4]];
const [[a, b], [c, d]] = matrix;
console.log(a, b, c, d); // 1 2 3 4
3๏ธโฃ Arrow Function (ES6)
// Arrow Function - แแแแแ แกแแแขแแฅแกแ
const greetUser = (name) => {
return `Hello, ${name}!`;
};
// แแแแแ แฃแคแ แ แแแแแ
const greetUser2 = name => `Hello, ${name}!`;
// แแ แแแแแ แแแ แแแแขแ แ
const add = (a, b) => a + b;
// แแแ แแแแขแ แแก แแแ แแจแ
const getRandomNumber = () => Math.random();
console.log(add(5, 3)); // 8
// Anonymous Function Expression
greetUser = function(name) {
return `Hello, ${name}!`;
};
// Named Function Expression
const calculate = function calc(x, y) {
return x + y;
};
// แแ แจแแแแฎแแแแแจแ Hoisting แแ แแฃแจแแแแก
console.log(greetUser("Ana")); // "Hello, Ana!"
๐ แแแแแแ แ แแแแกแฎแแแแแแแแ:
โข Arrow functions แแ แแฅแแ แกแแแฃแแแ แ this
โข Function declarations แแฌแแแแแ hoisting-แก
โข Arrow functions แฃแคแ แ แแแแแแฅแขแฃแ แ แกแแแขแแฅแกแ แแฅแแ
๐ก แแแแแแ แ แฃแแแ แแขแแกแแแแแ:
โข แแแแ แฃแคแ แ แแแแแ แแ แฌแแแแแฎแแแแ
โข แชแแแแแแแแก แแแ แขแแแ แจแแชแแแ
โข แคแฃแแฅแชแแแแแแแ แแ แแแแแ แแแแจแแแแแแแแก แแแฆแแแ
๐ฏ Scope แกแแคแฃแซแแแแแ
แ แ แแ แแก Scope?
Scope แแแแกแแแฆแแ แแแก แกแแ แแ แแก แฎแแแแแกแแฌแแแแแ แชแแแแแแแ แแ แคแฃแแฅแชแแแแ แแแแจแ. JavaScript-แจแ แแ แแก
แ แแแแแแแแ แกแแฎแแก
scope:
- Global Scope - แแแแแแแฃแ แ
- Function Scope - แคแฃแแฅแชแแแก
- Block Scope - แแแแแแก (ES6+)
๐ Global Scope
// Global Scope - แงแแแแแแ แฎแแแแแกแแฌแแแแแ
let globalVar = "I'm global!";
var oldGlobal = "I'm also global!";
function showGlobal() {
console.log(globalVar); // แฎแแแแแกแแฌแแแแแแ
console.log(oldGlobal); // แฎแแแแแกแแฌแแแแแแ
}
showGlobal(); // "I'm global!" "I'm also global!"
๐ง Function Scope
function myFunction() {
let functionVar = "I'm in function scope";
var oldFunctionVar = "Me too!";
console.log(functionVar); // แแฃแจแแแแก
console.log(oldFunctionVar); // แแฃแจแแแแก
}
myFunction();
// console.log(functionVar); // Error! แแ แแ แแก แฎแแแแแกแแฌแแแแแ
// console.log(oldFunctionVar); // Error! แแ แแ แแก แฎแแแแแกแแฌแแแแแ
๐ฆ Block Scope (ES6+)
// Block Scope - let แแ const แแแแแงแแแแแแกแแก
if (true) {
let blockVar = "I'm in block scope";
const blockConst = "Me too!";
var oldVar = "I'm not!";
console.log(blockVar); // แแฃแจแแแแก
console.log(blockConst); // แแฃแจแแแแก
}
// console.log(blockVar); // Error!
// console.log(blockConst); // Error!
console.log(oldVar); // แแฃแจแแแแก! var แแ แแชแแแแก block scope-แก
// for loop-แจแ block scope
for (let i = 0; i < 3; i++) {
console.log(i); // 0, 1, 2
}
// console.log(i); // Error!
๐ก แ แฉแแแ: แงแแแแแแแแก แแแแแแงแแแแ let
แแ const
var
-แแก
แแแชแแแแ!
๐ Lexical Scope & Scope Chain
Lexical Scope
Lexical Scope แแแจแแแแก, แ แแ แคแฃแแฅแชแแแก scope แแแแแกแแแฆแแ แแแ แแฅ, แกแแแแช แแก แแ แแก แแแแกแแแฆแแ แฃแแ แแแแจแ, แแ แ
แแฅ แกแแแแช
แแซแแฎแแแ.
let globalVar = "Global";
function outerFunction() {
let outerVar = "Outer";
function innerFunction() {
let innerVar = "Inner";
// แงแแแแ แชแแแแแ แฎแแแแแกแแฌแแแแแแ
console.log(innerVar); // "Inner"
console.log(outerVar); // "Outer"
console.log(globalVar); // "Global"
}
innerFunction();
// console.log(innerVar); // Error! แแ แแ แแก แฎแแแแแกแแฌแแแแแ
}
outerFunction();
๐ Scope Chain
JavaScript แแซแแแก แชแแแแแแแก Scope Chain-แแก แแแฎแแแแแ: แฏแแ แแแแแแฃแ scope-แจแ, แจแแแแแ parent scope-แจแ
แแ แแกแ แจแแแแแ
global scope-แแแ.
let name = "Global Ana";
function level1() {
let name = "Level1 Nino";
function level2() {
let name = "Level2 Mari";
function level3() {
// name-แก แแ แแฅแแก แแแแแแฃแ แ แแแแกแแแฆแแ แแแ
console.log(name); // "Level2 Mari" - แแฎแแ scope-แแแแ
}
level3();
}
level2();
}
level1();
// แแแแแแแแ scope chain-แแ
function findVariable() {
// let searchVar = "local"; // แแแแก แแแแแแขแแ แ แแแฃแแแแแ
function inner() {
console.log(searchVar); // แแซแแแก parent scope-แแแจแ
}
inner();
}
let searchVar = "global";
findVariable(); // "global"
๐ฏ แแแแจแแแแแแแแแ: JavaScript แงแแแแแแแแก แแงแแแแแก แแฎแแ scope-แก. แแฃ แชแแแแแ แแ แกแแแแแก
แ แแแแแแแแ
scope-แจแ, แแแแแแงแแแแแ แงแแแแแแ แแฎแแ.
๐ฆ Closures
แ แ แแ แแก Closure?
Closure แแก แแ แแก แคแฃแแฅแชแแ, แ แแแแแกแแช แแฅแแก แฌแแแแแ แแแแแก parent scope-แแก แชแแแแแแแแ, แแแจแแแแช แแ แ แแชแ
parent แคแฃแแฅแชแแ
แฃแแแ แแแกแ แฃแแแแฃแแแ.
๐ฎ แซแแ แแแแแ แแแแแแแแ
function createCounter() {
let count = 0; // private แชแแแแแ
return function() {
count++; // แจแแแ แคแฃแแฅแชแแ แแฎแกแแแก parent-แแก แชแแแแแก
return count;
};
}
const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2
console.log(counter2()); // 1 (แแแแชแแแแแแแแฃแแ counter)
console.log(counter1()); // 3
๐ก๏ธ Private แชแแแแแแแ
function createBankAccount(initialBalance) {
let balance = initialBalance;
return {
deposit: function(amount) {
balance += amount;
return balance;
},
withdraw: function(amount) {
if (amount <= balance) {
balance -= amount;
return balance;
}
return "แแ แแกแแแแแ แแกแ แแแแฎแ";
},
getBalance: function() {
return balance;
}
};
}
const myAccount = createBankAccount(1000);
console.log(myAccount.getBalance()); // 1000
console.log(myAccount.deposit(500)); // 1500
console.log(myAccount.withdraw(200)); // 1300
// balance-แแ แแแ แแแแแ แฌแแแแแ แจแแฃแซแแแแแแแ
// console.log(myAccount.balance); // undefined
๐ Loop-แแแจแ Closures
// โ แแ แแกแฌแแ แ แแแ (var-แแ)
console.log("แแ แแกแฌแแ แ แแแแแแแแ:");
for (var i = 1; i <= 3; i++) {
setTimeout(function() {
console.log("var: " + i); // แงแแแแ 4-แก แแแแแญแแแแก
}, 1000);
}
// โ
แกแฌแแ แ แแแ (let-แแ)
console.log("แกแฌแแ แ แแแแแแแแ:");
for (let i = 1; i <= 3; i++) {
setTimeout(function() {
console.log("let: " + i); // 1, 2, 3-แก แแแแแญแแแแก
}, 1000);
}
// โ
IIFE-แแ (Immediately Invoked Function Expression)
console.log("IIFE แแแแแแแแ:");
for (var i = 1; i <= 3; i++) {
(function(index) {
setTimeout(function() {
console.log("IIFE: " + index); // 1, 2, 3-แก แแแแแญแแแแก
}, 1000);
})(i);
}
๐ก Closures-แแก แแแแแงแแแแแ:
โข Private แชแแแแแแแแก แจแแฅแแแ
โข Module Pattern
โข Callback Functions
โข Event Handlers
โจ Rest & Spread Operators
Rest (...) Operator
Rest operator แแแ แแแแแก แแ แแแแ แแแแแแแขแก แแ แ แแแกแแแจแ. แแแแแแงแแแแแ แคแฃแแฅแชแแแก แแแ แแแแขแ แแแจแ แแ
destructuring-แจแ.
Spread (...) Operator
Spread operator "แแจแแแก" แแแกแแแก แแ แแแแแฅแขแก แชแแแแแฃแ แแแแแแแขแแแแ.
๐ฅ Rest Parameters
// Rest parameters - แงแแแแ argument-แ แแแกแแแจแ
function sum(...numbers) {
console.log(numbers); // แแแกแแแแ
return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3, 4, 5)); // 15
console.log(sum(10, 20)); // 30
// Rest-แ แฃแแแ แแงแแก แแแแแจแ
function greetUsers(greeting, ...names) {
return names.map(name => `${greeting}, ${name}!`);
}
console.log(greetUsers("Hello", "Ana", "Nino", "Mari"));
// ["Hello, Ana!", "Hello, Nino!", "Hello, Mari!"]
๐ค Spread Syntax
// Spread แแแกแแแแแแแ
const numbers1 = [1, 2, 3];
const numbers2 = [4, 5, 6];
// แแแกแแแแแแก แแแแ แแแแแแแ
const combined = [...numbers1, ...numbers2];
console.log(combined); // [1, 2, 3, 4, 5, 6]
// แแแกแแแแก แแแแแ แแแ
const copied = [...numbers1];
console.log(copied); // [1, 2, 3]
// Math.max()-แแ แแแแแงแแแแแ
console.log(Math.max(...numbers1)); // 3
// Spread แแแแแฅแขแแแแแ (ES2018)
const person = { name: "Ana", age: 25 };
const address = { city: "Tbilisi", country: "Georgia" };
const fullInfo = { ...person, ...address, age: 26 };
console.log(fullInfo);
// { name: "Ana", age: 26, city: "Tbilisi", country: "Georgia" }
๐ Rest vs Spread
// REST - แแแ แแแแแก
function processItems(...items) { // REST
console.log("Items:", items);
return items.length;
}
const myArray = [1, 2, 3, 4, 5];
// SPREAD - แแจแแแก
const count = processItems(...myArray); // SPREAD
console.log("Count:", count); // 5
// Array destructuring-แจแ REST
const [first, second, ...rest] = myArray;
console.log("First:", first); // 1
console.log("Second:", second); // 2
console.log("Rest:", rest); // [3, 4, 5]
๐ Array Destructuring
Array Destructuring
Array Destructuring แแแแซแแแแก แกแแจแฃแแแแแแก แแแกแแแแก แแแแแแแขแแแ แชแแแแแฃแ แชแแแแแแแจแ แแแแแแแฌแแแแ แแแแแ แแ
แแแ แขแแแ
แกแแแขแแฅแกแแ.
๐ฏ แซแแ แแแแแ แแแแแงแแแแแ
// แซแแแแ แแแ
const fruits = ["apple", "banana", "orange"];
const firstFruit = fruits[0];
const secondFruit = fruits[1];
// แแฎแแแ แแแ - Destructuring
const [first, second, third] = fruits;
console.log(first); // "apple"
console.log(second); // "banana"
console.log(third); // "orange"
// แแแแแแแขแแแแก แแแแแขแแแแแ
const [a, , c] = fruits; // banana-แแก แแแแแขแแแแแ
console.log(a); // "apple"
console.log(c); // "orange"
๐จ แแแฌแแแแแ แขแแฅแแแแแแ
// Default values
const colors = ["red"];
const [primary, secondary = "blue"] = colors;
console.log(primary); // "red"
console.log(secondary); // "blue" (default)
// Rest operator-แแ
const numbers = [1, 2, 3, 4, 5];
const [head, ...tail] = numbers;
console.log(head); // 1
console.log(tail); // [2, 3, 4, 5]
// แชแแแแแแแแก แจแแชแแแ (Swapping)
let x = 10;
let y = 20;
[x, y] = [y, x];
console.log(x); // 20
console.log(y); // 10
๐ง แคแฃแแฅแชแแแแแแ แแแแแงแแแแแ
// แคแฃแแฅแชแแ แ แแช แแแแแ แฃแแแแก แแแกแแแก
function getCoordinates() {
return [42.0, 43.0];
}
const [latitude, longitude] = getCoordinates();
console.log(`Lat: ${latitude}, Lng: ${longitude}`);
// แแ แแแแแ แแแแจแแแแแแแแก แแแแ แฃแแแแ
function calculate(a, b) {
return [a + b, a - b, a * b, a / b];
}
const [sum, difference, product, quotient] = calculate(10, 2);
console.log(`Sum: ${sum}, Difference: ${difference}, Product: ${product}, Quotient: ${quotient}`);
๐ แ แแแแฃแ แ แแแแแแแแแแ:
โข API responses-แแก แแแแฃแจแแแแแ
โข React state hooks-แแแแก แแแแแงแแแแแ
โข Loop-แแแจแ index แแ value แแ แแแ แแฆแแแ
โข แคแฃแแฅแชแแแแแก แแ แแแแแ แแแแจแแแแแแแแก แแแแ แฃแแแแ
๐ Object Destructuring
Object Destructuring
Object Destructuring แกแแจแฃแแแแแแก แแแแซแแแแก แแแแแฅแขแแก properties แชแแแแแฃแ แชแแแแแแแจแ แแแแฆแแ. แแก
แแแแกแแแฃแแ แแแแ แกแแกแแ แแแแแแ API responses แแ complex objects-แแแแแ แแฃแจแแแแแกแแก.
๐ฏ แซแแ แแแแแ แแแแแงแแแแแ
// แซแแแแ แแแ
const person = {
name: "Ana",
age: 25,
city: "Tbilisi",
profession: "Developer"
};
const name = person.name;
const age = person.age;
// แแฎแแแ แแแ - Destructuring
const { name, age, city } = person;
console.log(name); // "Ana"
console.log(age); // 25
console.log(city); // "Tbilisi"
// แชแแแแแแก แกแแฎแแแแก แจแแชแแแ
const { name: fullName, profession: job } = person;
console.log(fullName); // "Ana"
console.log(job); // "Developer"
๐จ แแแฌแแแแแ แขแแฅแแแแแแ
// Default values
const settings = { theme: "dark" };
const { theme, language = "Georgian", fontSize = 16 } = settings;
console.log(theme); // "dark"
console.log(language); // "Georgian" (default)
console.log(fontSize); // 16 (default)
// Nested objects
const user = {
name: "Nino",
address: {
street: "Rustaveli Ave",
city: "Tbilisi",
country: "Georgia"
},
hobbies: ["reading", "coding"]
};
const {
name: userName,
address: { city: userCity, country },
hobbies: [firstHobby]
} = user;
console.log(userName); // "Nino"
console.log(userCity); // "Tbilisi"
console.log(country); // "Georgia"
console.log(firstHobby); // "reading"
๐ง แคแฃแแฅแชแแแแจแ Destructuring
// Function parameters destructuring
function displayUser({ name, age, city = "Unknown" }) {
console.log(`Name: ${name}`);
console.log(`Age: ${age}`);
console.log(`City: ${city}`);
}
const userData = { name: "Mari", age: 30, city: "Batumi" };
displayUser(userData);
// API response example
function processApiResponse({ data, status, message = "Success" }) {
if (status === "success") {
return data;
}
throw new Error(message);
}
// Rest in object destructuring
const config = {
host: "localhost",
port: 3000,
ssl: true,
debug: false,
timeout: 5000
};
const { host, port, ...options } = config;
console.log(host); // "localhost"
console.log(port); // 3000
console.log(options); // { ssl: true, debug: false, timeout: 5000 }
๐ แ แแแแฃแ แ แแแแแแแแแแ:
โข API responses-แแก แแแแฃแจแแแแแ
โข React props-แแแแก destructuring
โข Configuration objects
โข Module imports
๐ ES6 Modules
ES6 Modules
Modules แกแแจแฃแแแแแแก แแแแซแแแแก แแแแ แแแแงแแ แชแแแแแฃแ แคแแแแแแจแ แแ แแแแฃแแแแจแ. แแก แฎแแแก แแแแก แฃแคแ แ
แแ แแแแแแแแฃแแก, แฎแแแแฎแแ แแแแแกแแงแแแแแแแก แแ แแแ แขแแแแ แกแแขแแกแขแแก.
๐ค Export - แแฅแกแแแ แขแ
// math.js แคแแแแ
// Named exports
export const PI = 3.14159;
export function add(a, b) {
return a + b;
}
export function multiply(a, b) {
return a * b;
}
// แแ แแ แแแ export
const subtract = (a, b) => a - b;
const divide = (a, b) => a / b;
export { subtract, divide };
// Default export
export default function calculator(operation, a, b) {
switch(operation) {
case 'add': return add(a, b);
case 'subtract': return subtract(a, b);
case 'multiply': return multiply(a, b);
case 'divide': return divide(a, b);
default: return 0;
}
}
๐ฅ Import - แแแแแ แขแ
// main.js แคแแแแ
// Named imports
import { PI, add, multiply } from './math.js';
console.log(PI); // 3.14159
console.log(add(5, 3)); // 8
// Default import
import calculator from './math.js';
console.log(calculator('multiply', 4, 5)); // 20
// Import all as namespace
import * as MathUtils from './math.js';
console.log(MathUtils.PI); // 3.14159
console.log(MathUtils.add(2, 3)); // 5
// Import with alias
import { subtract as minus, divide as div } from './math.js';
console.log(minus(10, 3)); // 7
// Mixed imports
import calculator, { PI, add } from './math.js';
๐ แ แแแแฃแ แ แแแแแแแแ
// utils.js
export const formatDate = (date) => {
return new Intl.DateTimeFormat('ka-GE').format(date);
};
export const capitalize = (str) => {
return str.charAt(0).toUpperCase() + str.slice(1);
};
export class Logger {
static log(message) {
console.log(`[${new Date().toISOString()}] ${message}`);
}
static error(message) {
console.error(`[ERROR] ${message}`);
}
}
// config.js
export default {
API_URL: 'https://api.example.com',
TIMEOUT: 5000,
VERSION: '1.0.0'
};
// app.js
import config from './config.js';
import { formatDate, capitalize, Logger } from './utils.js';
Logger.log('Application started');
console.log(`API URL: ${config.API_URL}`);
console.log(`Today: ${formatDate(new Date())}`);
console.log(capitalize('hello world')); // "Hello world"
โ ๏ธ แแแแจแแแแแแแแแ:
โข Modules แแฃแจแแแแก แแฎแแแแ server-แแ แแ type="module"
-แแ
โข แคแแแแแก extension (.js) แแฃแชแแแแแแแแ
โข Modules แงแแแแแแแแก strict mode-แจแแ
๐ป แแ แแฅแขแแแฃแแ แแแ แฏแแจแแแ
๐ฏ แแแ แฏแแจแ 1: Function Types
แแแแแแแแ: แจแแฅแแแแแ แแ แแ แแ แแแแแ แคแฃแแฅแชแแ แกแแแแแ แกแขแแแจแ:
- Function Declaration
- Function Expression
- Arrow Function
แคแฃแแฅแชแแ แฃแแแ แแฆแแแแแก แกแแฎแแแก แแ แแกแแแก, แแแแแ แฃแแแก แแแกแแแแแแแก แขแแฅแกแขแ.
๐ แแแ แฏแแจแ 2: Closure Bank Account
แแแแแแแแ: แจแแฅแแแแแ bank account closure แ แแแแแกแแช แแฅแแแแ:
- deposit() - แแแแฎแแก แจแแขแแแ
- withdraw() - แแแแฎแแก แแแแแขแแแ (แจแแแแแฌแแแ balance)
- getBalance() - แแแแแแกแแก แฉแแแแแแ
- getTransactionHistory() - แขแ แแแแแฅแชแแแแแก แแกแขแแ แแ
๐ แแแ แฏแแจแ 3: Array & Object Destructuring
แแแชแแแฃแแแ:
const students = [
{ name: "Ana", grades: [85, 90, 78], city: "Tbilisi" },
{ name: "Nino", grades: [92, 88, 95], city: "Batumi" },
{ name: "Mari", grades: [78, 85, 82], city: "Kutaisi" }
];
แแแแแแแแ: Destructuring-แแ:
- แแแแแฆแแ แแแ แแแแ แกแขแฃแแแแขแแก แกแแฎแแแ แแ แแแ แแแแ แฅแฃแแ
- แจแแฅแแแแแ แคแฃแแฅแชแแ แ แแแแแแช แแฆแแแก student object-แก แแ แแแ แฃแแแแก average แฅแฃแแแก
๐ ๏ธ แแแ แฏแแจแ 4: Rest & Spread
แแแแแแแแ: แจแแฅแแแแแ แคแฃแแฅแชแแแแ:
- findMinMax(...numbers) - แงแแแแแแ แแแขแแ แ แแ แแแแ แ แแชแฎแแ
- mergeArrays(...arrays) - แแแกแแแแแแก แแแแ แแแแแแแ
- updateUser(user, updates) - spread-แแ user object-แแก แแแแแฎแแแแ
๐ฏ แแแแแ แแแแก แแแแแฌแแแแแแ
๐ Challenge 1: Smart Calculator Module
แแแแแแแแ: แจแแฅแแแแแ calculator module แ แแแแแแช:
- แแฅแกแแแ แข แคแฃแแฅแชแแแแ: add, subtract, multiply, divide
- แแฅแแก history closure แ แแแแแแช แแแแฎแแแก แงแแแแ operation-แก
- clearHistory() แคแฃแแฅแชแแ
- getHistory() แคแฃแแฅแชแแ
// แแแกแแแแแแแแ แแแแแงแแแแแ:
import { add, getHistory, clearHistory } from './calculator.js';
console.log(add(5, 3)); // 8
console.log(getHistory()); // ["add(5, 3) = 8"]
๐ฎ Challenge 2: Game Score Manager
แแแแแแแแ: แจแแฅแแแแแ game score manager:
const gameManager = createGameManager();
// แแแแแแแแ:
gameManager.addPlayer(name, initialScore = 0)
gameManager.updateScore(name, points) // + แแ - points
gameManager.getLeaderboard() // แแแงแแ แแแฃแแ แกแแ
gameManager.getPlayerStats(name) // destructuring-แแ แแแแแ แฃแแแก stats
๐ Challenge 3: Utility Library
แแแแแแแแ: แจแแฅแแแแแ utility library module:
deepClone(obj)
- แฆแ แแ แแแแแ แแแ
groupBy(array, key)
- array-แแก แแแฏแแฃแคแแแ
debounce(func, delay)
- debounce function
formatters
- แแแแแฅแขแ แกแฎแแแแแกแฎแแ formatter แคแฃแแฅแชแแแแแ
๐ แกแแฎแแแก แแแแแแแแ
๐ แแแแ แแฃแแ แแแฌแแแ
- แแแแแ แแ แแฎแแ แแแแแฎแแแแ แงแแแแ แแแแแแแแก
- แจแแแกแฌแแแแแ MDN documentation Closures-แแ
- แแแฎแแ 2-3 YouTube แแแแแ ES6 Modules-แแ
๐ แแแแแแแแ 1: Shopping Cart Module
แจแแฅแแแแแ shopping cart module แจแแแแแแ แคแฃแแฅแชแแแแแแแ:
// cart.js - ES6 module
// แแแกแแแแแแแแ แแแแแงแแแแแ:
import ShoppingCart from './cart.js';
const cart = new ShoppingCart();
cart.addItem({ id: 1, name: "Laptop", price: 1200, quantity: 1 });
cart.addItem({ id: 2, name: "Mouse", price: 25, quantity: 2 });
console.log(cart.getTotal()); // 1250
console.log(cart.getItemCount()); // 3
cart.removeItem(1);
console.log(cart.getCart()); // แแแ แฉแแแแแ items
แแแแฎแแแแแแ:
- แแแแแแงแแแแ ES6 Classes แแ Modules
- private methods-แแกแแแแก แแแแแแงแแแแ Closures
- แงแแแแ method-แจแ แแแแแแงแแแแ Destructuring
- validation-แแกแแแแก แแแแแแงแแแแ default parameters
๐ แแแแแแแแ 2: Data Processing Pipeline
แจแแฅแแแแแ data processing module:
// แแแชแแแฃแแ data
const rawData = [
"Ana Beridze,25,Tbilisi,Developer,3500",
"Nino Kapanadze,30,Batumi,Designer,2800",
"Mari Gelashvili,28,Kutaisi,Manager,4200"
];
// แแแกแแแแแแแแ แจแแแแแ:
[
{ name: "Ana", surname: "Beridze", age: 25, city: "Tbilisi",
position: "Developer", salary: 3500 },
// ...
]
แคแฃแแฅแชแแแแ แ แแช แฃแแแ แจแแฅแแแแ:
parseData(rawData)
- string array-แก object array-แจแ แแแ แแแฅแแแ
filterByCity(...cities)
- rest parameter-แแ แคแแแขแ แแชแแ
sortBySalary(ascending = true)
- default parameter
getStatistics()
- average salary, cities count, etc.
๐
แฉแแแแ แแแแก แแแแ: แแแแแแแแ แกแแกแแแก แแแฌแงแแแแแแ
๐ แฉแแแแ แแแแก แคแแ แแ: GitHub repository link
๐ แจแแคแแกแแแแก แแ แแขแแ แแฃแแแแ: แแแแแก แกแแกแฃแคแแแแ, ES6 features-แแก แกแฌแแ แ แแแแแงแแแแแ,
แคแฃแแฅแชแแแแแแฃแ แแแ
๐ แฅแแแแ
๐ แฅแแแแแก แแแกแขแ แฃแฅแชแแ
แฅแแแแ แจแแแแแแ 15 แแแแฎแแแกแแแ แแ แแแแชแแแก แงแแแแ แแแแแก แ แแช แแฆแแก แจแแแกแฌแแแแแ. แแแแแแฃแ แแแแฎแแแก แแฅแแก 4
แแแ แแแแขแ แแแกแฃแฎแ.
โ แแแแฎแแแแแก แแแแแแแแแแ:
1. แ แ แแ แแก Closure JavaScript-แจแ?
- a) แคแฃแแฅแชแแ แ แแแแแแช แแฎแฃแ แแแ
- b) แคแฃแแฅแชแแ แ แแแแแกแแช แแฅแแก แฌแแแแแ parent scope-แแ
- c) แคแฃแแฅแชแแ แ แแแแแแช แแ แแฆแแแก แแแ แแแแขแ แแแก
- d) แคแฃแแฅแชแแ แ แแแแแแช แแแ แฃแแแแก boolean-แก
2. แ แ แจแแแแแ แแฅแแแแ แแ แแแแแก?
const [a, , c] = [1, 2, 3, 4];
console.log(a, c);
- a) 1 2
- b) 1 3
- c) 1 4
- d) Error
3. Rest operator (...) แแแแแแงแแแแแ:
- a) แแฎแแแแ แคแฃแแฅแชแแแก แแแ แแแแขแ แแแจแ
- b) แแฎแแแแ array destructuring-แจแ
- c) แแ แแแแจแ - แคแฃแแฅแชแแแก แแแ แแแแขแ แแแจแแช แแ destructuring-แจแแช
- d) แแฎแแแแ แแแแแฅแขแแแแแ
๐ แฅแแแแแก แจแแแแแแแ:
โข 90-100% - แจแแกแแแแจแแแแ!
โข 70-89% - แแแ แแ แจแแแแแ
โข 50-69% - แกแแญแแ แแ แแแแแขแแแแแ แจแแกแฌแแแแ
โข <50% - แแแแแแแแ แแ แแแกแแแ