20 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝗖𝗹𝗼𝘀𝘂𝗿𝗲 𝗜𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄 𝗤𝘂𝗲𝘀𝘁𝗶𝗼𝗻𝘀 𝘁𝗼 𝗡𝗮𝗶𝗹 𝗬𝗼𝘂𝗿 𝗡𝗲𝘅𝘁 𝗧𝗲𝗰𝗵 𝗥𝗼𝗹𝗲🚀

(** برای بالا بردن شما از جوان به نقش ارشد 😎 **)
– چگونه بسته شدن کار می کند؟
آیا می توانید تابعی را بنویسید که با استفاده از بسته شدن ، یک متغیر خصوصی ایجاد کند؟
– توضیح می دهد که چرا کد زیر سه بار 3 بار خروجی می کند ، و چگونه می توانید آن را برطرف کنید؟
برای (var i = 0 ؛ i <3 ؛ i ++) {
settimeout (عملکرد () {
console.log (i) ؛
} ، 1000) ؛
}
– چگونه می توان از بسته شدن برای ایجاد یک تابع یادآوری استفاده کرد؟
✅ عملکردی را که با استفاده از بسته شدن ، شناسه های منحصر به فردی ایجاد می کند.
– خرابی احتمالی استفاده از بسته شدن چیست؟
– آیا می توانید از بسته شدن برای دریچه گاز استفاده کنید؟
– چگونه می توانید از بسته شدن برای ایجاد الگوی ماژول استفاده کنید؟
– چگونه بسته شدن با شنوندگان رویداد تعامل دارد؟
– تفاوت بین بسته شدن و یک عملکرد منظم را نشان می دهد.
– چگونه می توانید از بسته شدن برای ایجاد تابعی که فقط یک بار اجرا می شود استفاده کنید؟
یک عملکرد مبتنی بر بسته شدن را برای حفظ تاریخچه ارزشها بنویسید.
– چگونه می توانید از بسته شدن برای ایجاد یک تابع کارخانه برای تولید تبریک های سفارشی استفاده کنید؟
آیا می توانید توضیح دهید که چگونه بسته ها در کاری استفاده می شوند و مثالی ارائه می دهند؟
– چگونه بسته شدن می تواند باعث نشت حافظه شود ، و چگونه می توانید از آنها جلوگیری کنید؟
– بسته شدن را برای محدود کردن تعداد دفعاتی که یک عملکرد نامیده می شود ، بنویسید.
– چگونه می توانید از بسته شدن برای ایجاد یک عملکرد ضامن استفاده کنید؟
آیا می توانید بدون استفاده از کلمه کلیدی کلاس ، بسته بندی یک ساختار کلاس مانند را ایجاد کنید؟
– چگونه بسته شدن با کد ناهمزمان ، مانند وعده ها تعامل دارد؟
یک تابع مبتنی بر بسته شدن را برای رد کردن ورودی کاربر بنویسید.
حال بیایید همه سؤال داده شده را یک توسط یک توضیح دهیم
👉1.What is a closure in JavaScript, and how does it work?
✍ بسته شدن تابعی است که متغیرها را در دامنه بیرونی خود به یاد می آورد ، حتی اگر در خارج از آن حوزه اجرا شود. این به دلیل اسکوپینگ واژگانی جاوا اسکریپت ایجاد شده است ، جایی که دامنه یک عملکرد توسط جایی که در کد نوشته شده است تعریف می شود. هنگامی که یک عملکرد داخلی متغیرهای بیرونی را ارجاع می دهد ، JavaScript آن متغیرها را در حافظه حفظ می کند و بسته شدن را تشکیل می دهد
function outer() {
let count = 0;
return function inner() {
count++;
return count;
};
}
const counter = outer();
console.log(counter()); // 1
console.log(counter()); // 2
عملکرد داخلی بیش از تعداد بسته می شود ، بنابراین حتی پس از اتمام بیرونی ، تعداد در حافظه همچنان ادامه دارد. هر تماس برای مقابله با () آن را افزایش می دهد ، و نشان می دهد که چگونه بسته شدن حالت را حفظ می کند. این یک مفهوم اصلی برای مصاحبه است ، همانطور که tests your grasp of scope and memory.
👉2.Can you write a function that creates a private variable using a closure?
✍Closures برای محاصره مناسب است ، به شما امکان می دهد متغیرهای خصوصی را ایجاد کنید که به طور مستقیم قابل دسترسی نباشند. با تعریف یک متغیر در یک عملکرد بیرونی و در معرض روش های تعامل با آن ، از حریم خصوصی داده ها اطمینان حاصل می کنید.
function createPerson() {
let name = "Alice"; // Private variable
return {
getName: function() {
return name;
},
setName: function(newName) {
name = newName;
}
};
}
const person = createPerson();
console.log(person.getName()); // "Alice"
person.setName("Bob");
console.log(person.getName()); // "Bob"
console.log(person.name); // undefined
Explanation👀:
نام خصوصی است زیرا فقط از طریق GetName و SetName قابل دسترسی است. این الگوی تقلید می کند private properties in OOP, a skill senior developers use to write secure, modular code javaScript
👉3.Explain why the following code outputs 3 three times, and how would you fix it?
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
✍ این 3-سه بار است زیرا var is function-scoped, not block-scoped
بشر تماس های Settimeout All Reference همان I را ارجاع می دهد ، که در زمان پایان حلقه و تماس با تماس ها 3 است.
Fix using let:
for (let i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
// Outputs: 0, 1, 2
Fix using IIFE (if using var):
for (var i = 0; i < 3; i++) {
(function(j) {
setTimeout(function() {
console.log(j);
}, 1000);
})(i);
}
// Outputs: 0, 1, 2
Explanation👀:
با استفاده از Let برای هر تکرار یک I جدید ایجاد می کند ، بنابراین هر بسته شدن مقدار صحیح را ضبط می کند. IIFE دامنه جدیدی را برای هر تکرار ایجاد می کند ، و من را به عنوان j می گذرد. این سؤال درک شما از Scoping و بسته شدن در حلقه ها را آزمایش می کند – مصاحبه مشترک Gotcha.
👉4.How can closures be used to create a memoization function?
✍memoization توابع را با ذخیره نتایج برای ورودی های مکرر بهینه می کند. بسته شدن می تواند یک حافظه نهان خصوصی را حفظ کند و مقادیر محاسبه شده را برای استفاده مجدد ذخیره کند.
function memoize(fn) {
let cache = {};
return function(...args) {
let key = JSON.stringify(args);
if (key in cache) {
return cache[key];
}
cache[key] = fn(...args);
return cache[key];
};
}
function slowFib(n) {
if (n <= 1) return n;
return slowFib(n - 1) + slowFib(n - 2);
}
const memoFib = memoize(slowFib);
console.log(memoFib(10)); // 55 (computed)
console.log(memoFib(10)); // 55 (cached)
Explanation👀:
بسته شدن بیش از فروشگاه های حافظه نهان ، باعث می شود تماس های بعدی سریعتر شود. توسعه دهندگان ارشد برای بهینه سازی عملکرد از Memoization استفاده می کنند و این سؤال که ذهنیت را آزمایش می کند.
👉5.Write a function that generates unique IDs using a closure.
✍ بسته شدن می تواند یک پیشخوان خصوصی را برای تولید شناسه های منحصر به فرد حفظ کند ، و هیچ تداخل خارجی را تضمین نمی کند.
function createIdGenerator() {
let id = 0;
return function() {
return id++;
};
}
const generateId = createIdGenerator();
console.log(generateId()); // 0
console.log(generateId()); // 1
console.log(generateId()); // 2
Explanation👀:
بسته شدن شناسه آن را خصوصی نگه می دارد و آن را در هر تماس افزایش می دهد. این برای تولید کلیدها در برنامه ها مفید است و برنامه بسته شدن عملی را نشان می دهد.
👉6.What are the potential downsides of using closures?
While powerful, closures have trade-offs:
Memory Usage:
متغیرهای بسته بسته تا زمانی که بسته شدن زباله جمع آوری شود ، در حافظه باقی می مانند ، در صورت سوء مدیریت ، به طور بالقوه باعث نشت می شود.
Performance:
ایجاد بسیاری از بسته شدن ها (به عنوان مثال در حلقه ها) می تواند حافظه و پردازش سربار را افزایش دهد.
Complexity:
استفاده بیش از حد می تواند کد را برای اشکال زدایی یا حفظ آن سخت تر کند.
function leaky() {
let bigData = new Array(1000000).fill("data");
return () => console.log(bigData.length);
}
در اینجا ، Bigdata به طور غیر ضروری ادامه می یابد و حافظه را مصرف می کند.
Explanation👀:
توسعه دهندگان ارشد تعادل را با پاکسازی (به عنوان مثال ، باطل کردن منابع یا حذف شنوندگان رویداد) برای جلوگیری از مسائل ، یک نکته مهم در مورد مصاحبه تعادل برقرار می کنند.
👉7.Can you use a closure to throttle a function?
✍throttling محدود می کند که چند بار یک عملکرد اجرا می شود ، برای عملکرد مفید است. بسته شدن می تواند آخرین زمان اجرای را ردیابی کند.
function throttle(fn, delay) {
let lastCall = 0;
return function(...args) {
let now = Date.now();
if (now - lastCall >= delay) {
lastCall = now;
return fn(...args);
}
};
}
const log = () => console.log("Throttled!");
const throttledLog = throttle(log, 1000);
setInterval(throttledLog, 200);
// Logs every ~1000ms
Explanation👀:
بسته شدن بیش از LastCall تضمین می کند که عملکرد فقط پس از گذشت تأخیر انجام می شود. این در بهینه سازی های UI رایج است و تفکر در سطح ارشد را نشان می دهد.
👉8.How would you use a closure to create a module pattern?
✍ الگوی ماژول از بسته شدن برای ایجاد اعضای خصوصی و دولتی استفاده می کند و از محاصره استفاده می کند.
const myModule = (function() {
let privateData = "Secret";
function privateMethod() {
return `Accessing ${privateData}`;
}
return {
publicMethod: function() {
return privateMethod();
},
publicData: "Public info"
};
})();
console.log(myModule.publicMethod()); // "Accessing Secret"
console.log(myModule.privateData); // undefined
Explanation👀:
IIFE بسته شدن را حفظ می کند و حریم خصوصی و خصوصی را پنهان نگه می دارد. این الگوی در کتابخانه ها استفاده می شود و مهارت های طراحی مدولار شما را آزمایش می کند.
👉9.How does a closure interact with event listeners?
✍Close در شنوندگان رویداد متغیرهای بیرونی را حفظ می کنند و در پاسخ به وقایع رفتار پویا را قادر می سازند.
function setupButton() {
let count = 0;
const button = document.createElement("button");
button.textContent = "Click me";
button.addEventListener("click", () => {
count++;
console.log(`Clicked ${count} times`);
});
document.body.appendChild(button);
}
setupButton();
Explane listener’s closure over count tracks clicks. Senior developers know to remove listeners to prevent leaks, a nuance interviewers may probe.
👉10. Explain the difference between a closure and a regular function.
✍ عملکرد منظم به متغیرها و پارامترهای خاص خود دسترسی پیدا می کند اما پس از پایان دامنه آنها متغیرهای بیرونی را از دست می دهد. بسته شدن دسترسی به متغیرهای دامنه بیرونی خود را به طور نامحدود حفظ می کند.
// Regular function
function add(a, b) {
return a + b;
}
console.log(add(2, 3)); // 5
// Closure
function makeAdder(x) {
return function(y) {
return x + y;
};
}
const addFive = makeAdder(5);
console.log(addFive(3)); // 8
Explanation👀:
بسته شدن Makeadder برخلاف ADD ، X را به یاد می آورد ، که همچنان دولت باقی نمی ماند. این توانایی شما در بیان تفاوت های اصلی را آزمایش می کند.
👉11.How can you use a closure to create a function that only runs once?
✍ بسته شدن می تواند اجرای را با پرچم ردیابی کند ، و اطمینان حاصل می کند که یک عملکرد فقط یک بار اجرا می شود.
function createOnceRunner() {
let hasRun = false;
return function() {
if (!hasRun) {
hasRun = true;
console.log("This runs only once!");
} else {
console.log("Already ran!");
}
};
}
const runOnce = createOnceRunner();
runOnce(); // "This runs only once!"
runOnce(); // "Already ran!"
Explanation👀:
بسته شدن بیش از HasRun ، اجرای آن را کنترل می کند ، که برای کارهای اولیه سازی در برنامه مفید است.
👉12.Write a closure-based function to maintain a history of values.
– بسته شدن می تواند آرایه ای را برای ردیابی مقادیر به مرور زمان ذخیره کند و آن را خصوصی نگه دارد.
function createHistoryTracker() {
let history = [];
return function(value) {
history.push(value);
return history;
};
}
const tracker = createHistoryTracker();
console.log(tracker("Step 1")); // ["Step 1"]
console.log(tracker("Step 2")); // ["Step 1", "Step 2"]
Explanation👀:
بسته شدن تاریخ ، دولت را حفظ می کند ، الگویی برای ورود به سیستم یا ویژگی های خنثیسازی.
👉13.How would you use a closure to create a factory function for generating customized greetings?
✍ بسته شدن می تواند توابع را با حفظ پارامترهای پیکربندی سفارشی کند.
function createGreeter(greeting) {
return function(name) {
return `${greeting}, ${name}!`;
};
}
const sayHello = createGreeter("Hello");
console.log(sayHello("Alice")); // "Hello, Alice!"
Explanation👀:
هر تابع برگشتی تبریک خود را به یاد می آورد و نشان می دهد که چگونه بسته ها الگوهای قابل استفاده مجدد را فعال می کنند.
👉14.Can you explain how closures are used in currying, and provide an example?
currurying با استفاده از بسته شدن مقادیر میانی ، یک تابع چند زایی را به توابع تک زبانی تقسیم می کند.
function curryAdd(a) {
return function(b) {
return function(c) {
return a + b + c;
};
};
}
console.log(curryAdd(1)(2)(3)); // 6
Explanation👀:
هر عملکرد داخلی بیش از پارامترهای بیرونی بسته می شود و انعطاف پذیری عملکردی را فعال می کند-یک مهارت در سطح ارشد.
👉15.How can closures cause memory leaks, and how would you prevent them?
✍Closures متغیرهایی را در حافظه نگه می دارد ، که در صورت عدم تمیز کردن ، می تواند منجر به نشت شود ، به خصوص با اشیاء بزرگ یا شنوندگان رویداد.
function setupLeak() {
let heavyData = new Array(1000000).fill("data");
document.getElementById("btn").addEventListener("click", () => {
console.log(heavyData.length);
});
}
Prevention:
- شنوندگان را حذف کنید: removeEventListener.
- References References: HeavyData = NULL.
- برای داده های موقت از map weakmap استفاده کنید.
Explanation👀:
توسعه دهندگان ارشد ، یک موضوع اصلی مصاحبه را به صورت پیشگیرانه مدیریت می کنند.
👉16.Write a closure to limit the number of times a function can be called.
✍ بسته شدن می تواند تعداد تماس ها را برای اجرای محدودیت ردیابی کند.
function limitCalls(fn, maxCalls) {
let calls = 0;
return function(...args) {
if (calls < maxCalls) {
calls++;
return fn(...args);
}
return "Max calls reached!";
};
}
const limitedLog = limitCalls(console.log, 2);
limitedLog("First"); // "First"
limitedLog("Second"); // "Second"
limitedLog("Third"); // "Max calls reached!"
Explanation👀:
بسته شدن تماس ها ، اجرای کنترل شده ، برای API ها یا آزمایشات را مفید می کند.
👉17.How would you use a closure to create a toggle function?
بسته شدن می تواند یک حالت بولی را برای جابجایی حفظ کند.
function createToggle() {
let isOn = false;
return function() {
isOn = !isOn;
return isOn ? "On" : "Off";
};
}
const toggle = createToggle();
console.log(toggle()); // "On"
console.log(toggle()); // "Off"
Explanation👀:
بسته شدن بیش از ISON به صورت خصوصی ، ایده آل برای کنترل UI.
👉18.Can you create a closure to simulate a class-like structure without using the class keyword?
✍ بسته شدن می تواند داده ها و روش ها را محاصره کند و از یک کلاس تقلید کند.
function createStudent(name) {
let score = 0;
return {
getName: () => name,
addScore: (points) => {
score += points;
return score;
},
getScore: () => score
};
}
const student = createStudent("Alice");
console.log(student.addScore(10)); // 10
console.log(student.getScore()); // 10
Explanation👀:
بسته شدن ، امتیاز را پنهان می کند و دسترسی کنترل شده را ارائه می دهد-یک جایگزین کلاس Prees6.
👉19.How do closures interact with asynchronous code, like Promises?
✍Closures اجازه می دهد تا عملیات ASYNC پس از تأخیر به متغیرهای بیرونی دسترسی پیدا کند.
function fetchWithContext(id) {
let context = `Request-${id}`;
return new Promise((resolve) => {
setTimeout(() => {
resolve(`${context}: Done`);
}, 1000);
});
}
fetchWithContext(1).then(console.log); // "Request-1: Done"
Explanation👀:
بسته شدن وعده از متن ، داده های صحیح را در تماس های API تضمین می کند
👉20.Write a closure-based function to debounce user input.
✍debouncing تأخیر در اجرای عملکرد تا زمانی که تماس های سریع متوقف شود ، با استفاده از بسته شدن برای ردیابی زمان.
function debounce(fn, delay) {
let timeoutId;
return function(...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => fn(...args), delay);
};
}
const logInput = debounce((value) => console.log(`Input: ${value}`), 500);
logInput("a");
logInput("b");
setTimeout(() => logInput("c"), 200);
// Logs "Input: c" after ~500ms
Explanation👀:
بسته شدن در طول TimeOtID فقط آخرین تماس را انجام می دهد ، بهینه سازی جستجو یا تغییر اندازه گیرندگان.
کدام یک از این سؤالات بسته شدن شما را بیشتر به چالش کشیده است؟ یا آیا یک نکته بسته شدن دارید که به شما در سطح بالایی کمک می کند؟ نظر زیر را رها کنید – من دوست دارم افکار شما را بشنوم و مکالمه را ادامه دهم!