Ответьте на три вопроса по JavaScript. Если какой-то из них вас затруднит, вам следует прочесть отличную книгу Тревора Бернхема (Trevor Burnham) — Async JavaScript. Всего 90 страниц, но здесь разобраны такие темы, как событийный цикл JavaScript, синхронность/асинхронность, однопоточность/многопоточность (воркеры), promises, fibers и еще много чего интересного.
Итак, что выдаст следующий код?
for (var i = 1; i <= 3; i++) {
setTimeout(function(){ console.log(i); }, 0);
};
Ответ
4
4
4
4
4
UPD Второй вопрос убран — различная реализация в браузерах.
Сколько (примерно) раз сработает
setInterval(func, 0)
за секунду в браузере?var fireCount = 0;
var start = new Date;
var timer = setInterval(function() {
if (new Date - start > 1000) {
clearInterval(timer);
console.log(fireCount);
return;
}
fireCount++;
}, 0);
Ответ
Не больше 250 (скорее всего 240-250)
Если интересно почему именно так — ответы есть в книге.
Содержание
- Introduction
- Trouble in Paradise
- Who Is This Book For?
- Resources for Learning JavaScript
- Where to Turn for Help?
- Running the Code Examples
- Code Style in This Book
- A Word on altJS
- Resources for This Book
- Understanding JavaScript Events
- Scheduling Events
- Types of Async Functions
- Writing Async Functions
- Handling Async Errors
- Un-nesting Callbacks
- What We’ve Learned
- Distributing Events
- PubSub
- Evented Models
- Custom jQuery Events
- What We’ve Learned
- Promises and Deferreds
- A Very Brief History of Promises
- Making Promises
- Passing Data to Callbacks
- Progress Notifications
- Combining Promises
- Binding to the Future with pipe
- jQuery vs. Promises/A
- Replacing Callbacks with Promises
- What We’ve Learned
- Flow Control with Async.js
- The Async Ordering Problem
- Async Collection Methods
- Organizing Tasks with Async.js
- Dynamic Async Queuing
- Minimalist Flow Control with Step
- What We’ve Learned
- Multithreading with Workers
- Web Workers
- Node Workers with cluster
- What We’ve Learned
- Async Script Loading
- Limitations and Caveats
- Reintroducing the <script> Tag
- Programmatic Loading
- What We’ve Learned
- Tools for Taming JavaScript
- TameJS
- StratifiedJS
- Kaffeine
- Streamline.js
- Node-Fibers
- The Future of JavaScript: Generators