Откройте консоль браузера и выполните следующий код:
var foo = /foo/g;
Затем
foo.test("foo") // true
Затем
foo.test("foo") // false
Если вы продолжите выполнение foo.test( "foo" ), вы увидите переменные истинные/ложные ответы, как если бы var foo фактически был изменен.
Кто-нибудь знает, почему это происходит?