Это началось, когда я прочитал эссе Гвидо ван Россума An Optimization Anecdote .
Решив попробовать то же самое в JavaScript, я рассчитал следующее:
numbers.map(function(x){ return String.fromCharCode(x); });
Это уже было довольно быстро, но почему бы не полностью исключить анонимную функцию и передать String.fromCharCode непосредственно в map ():
numbers.map(String.fromCharCode);
Я рассчитал время и ... ... это было примерно в 100 раз медленнее , чем в предыдущей версии. Почему?
Почему-то передача этой нативной функции напрямую в Array.map () происходит медленнее, чем перенос ее внутри другой функции и передача в Array.map ().
Это не зависит от браузера: проверено в Chrome, Firefox и Opera.
Это не относится к map (): пробовал forEach (), который вел себя аналогичным образом.
Это не относится к встроенным функциям: пробовал Math.round () и Math.sin () - с этими результаты были такими, как и следовало ожидать: прямая передача функции в Array.map () была немного быстрее, чем использование промежуточной анонимной функции.
Кажется, проблема в String. fromCharCode в частности.
Что здесь происходит?
PS. Первоначально этот вопрос был задан в ветке Hacker News , но, поскольку соответствующая статья посвящена Python, я подумал, что после публикации здесь она получит больше внимания для разработчиков JavaScript. Извините за перекрестную публикацию.