Конфликт определения и выражения
Добрый вечер, недавно ради интереса написал функцию и во время тестирования возникла довольно таки странная проблема, в чем причина понять вообще не могу, вот собственно код:
RegExp.prototype.execMatch = function(string) { if (!this.global) return this.exec(string); var resultArray = []; var execArray = []; while (execArray) { execArray = this.exec(string); resultArray.push(execArray); } return resultArray; } //если вставить сюда любое выражение, ошибки не будет. (function() { var s = "1 20 300 4000"; var reg = /(\d+)/g; var result = reg.execMatch(s); })(); Собственно, это функция, которая объединяет функционал методов match и exec, но суть не в этом. Почему-то, функция-выражение, которая идет сразу за определением моей функции, заставляет исполнять код execMatch и тем самым при попадании на строку: if (!this.global) return this.exec(string); генерируется исключение по понятным причинам. Это, конечно, не катастрофа, но все-же, в чем моя ошибка? Чем обуславливается это странное поведение? |
После } не хватает ; (в 10-ой строчке)
Это "странное" поведение можно объяснить так: var test = function func(fn){ return fn; } (function(){ // функция из этих скобок передается в ф-цию func alert('test'); })(); // а эти скобки вызывают то, что вернула ф-ция func |
Да, точно, по непонятным причинам держал в голове присваивание метода как обычное определение функции, вот и не поставил, спасибо!
|
Часовой пояс GMT +3, время: 00:01. |