В последнее время я много работал с Node JS, и это упор на асинхронных модулях заставляет меня полагаться на применение функции привязки к замыканиям для обертывания асинхронные вызовы внутри циклов (для сохранения значений переменных при вызове функции). Это заставило меня задуматься. Когда вы привязываете переменные к функции, вы добавляете переданные значения в локальную область видимости этой функции. Итак, в Node (или любом JS-коде, который часто ссылается на переменные вне области видимости), выгодно ли привязать переменные вне области видимости (например, модули) к функциям, чтобы при использовании они были частью локальной области видимости?
Пример на простом JS:
var a = 1,
func1 = function(b) { console.log(a,b); },
func2 = (function(a,b) { console.log(a,b); }).bind(null, a);
//func1(2) vs func2(2)
Пример в узле
var fs = require('fs'),
func1 = function(f) { fs.stat(f, function(err, stats){}); },
func2 = (function(fs, f) { fs.stat(f, function(err, stats){}); }).bind(null, fs);
//func1('file.txt') vs func2('file.txt')
Будет ли func1 или func2 заметно быстрее других (не включая внешние факторы, такие как время, необходимое для получения статистики файла)?
Вот пример маленький JSFiddle, который я собрал вместе, который выполняет быстрый и грязный тест: http://jsfiddle.net/AExvz/
Примечание: Тест REPL узла ненадежен, потому что он должен использовать какую-то систему кэширования. После единственного теста func1, func2 вернул 0 мс.
Не стесняйтесь поделиться своими результатами более качественного теста.