Согласно 6-му изданию JavaScript: The Definitive Guide (Фланаган, 2011 г.):
ECMAScript v3 указывает, что аргумент замена для
replace()
может быть функцией, а не строкой.
Я смотрю на некоторый код, написанный в 2005 году, где сложный обходной путь использовался для замены частей строки. Комментарии к коду ясно указывают на то, что изначально он использовал функциональный метод replace()
, но обходной путь был необходим для кроссбраузерной совместимости.
ECMAScript v3 вышел в 1999 году и, насколько я могу судить (из этого поста для обсуждения и эту запись в блоге), ECMAScript v3 поддерживается всеми основными браузерами с конца 2001 года. Мог ли автор ошибаться, или кто-нибудь может пролить свет на то, почему такой обходной путь мог быть необходим в 2005 году?
...
ОБНОВЛЕНИЕ Фактический комментарий автора кода гласит:
Лямбда-функции в регулярных выражениях в настоящее время являются проблемой для слишком многих браузеров.
изменил код, чтобы обойти.
Код автора работает или работает для этого бизнеса, хотя сам код вполне может быть личным проектом.
replace
с функцией в качестве второго аргумента. Отчасти поэтому в Prototype.js мы использовалиString#gsub
(помимо имени метода в стиле rubyesque и некоторого дополнительного сахара). Быстрый поиск в Google показывает эту ошибку webkit: bugs.webkit.org/show_bug.cgi?id= 3294, так что, видимо, это было исправлено где-то в конце 2005 года. На основе phrogz.net/JS /replaceTest.html по-видимому, IEMac это тоже не поддерживал :) Все это означает, что вы можете смело использовать функцию-как-2-й-аргумент сегодня, если только не важна совместимость с такими динозаврами, как Saf 2 или IEMac. - person kangax   schedule 13.04.2013