Недавно я прочитал это руководство по производительности Let's make the web faster и был озадачен рекомендациями "Avoiding pitfalls with closures" (как будто эти советы были даны для пользователей CommonLisp, у которых скопинг переменных динамический):
var a = 'a'; function createFunctionWithClosure() { var b = 'b'; return function () { var c = 'c'; a; b; c; }; } var f = createFunctionWithClosure(); f();
когда вызывается
f
, обращение кa
происходит медленнее, чем обращение кb
, которое медленнее, чем обращение кc
.
Совершенно очевидно, что обращение к локальной переменной c быстрее, чем b, но если итерпретатор написан правильно (без динамического скопирования - что-то вроде цепочки хэш-таблиц...), то разница в скорости должна быть незначительной. Или нет?