Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.04.2011, 22:22
Интересующийся
Отправить личное сообщение для Goodfella Посмотреть профиль Найти все сообщения от Goodfella
 
Регистрация: 22.02.2011
Сообщений: 11

Конфликт определения и выражения
Добрый вечер, недавно ради интереса написал функцию и во время тестирования возникла довольно таки странная проблема, в чем причина понять вообще не могу, вот собственно код:
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);

генерируется исключение по понятным причинам.
Это, конечно, не катастрофа, но все-же, в чем моя ошибка? Чем обуславливается это странное поведение?
Ответить с цитированием
  #2 (permalink)  
Старый 26.04.2011, 23:07
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

После } не хватает ; (в 10-ой строчке)

Это "странное" поведение можно объяснить так:
var test = function func(fn){
  return fn;
}
(function(){ // функция из этих скобок передается в ф-цию func
  alert('test');
})(); // а эти скобки вызывают то, что вернула ф-ция func

Последний раз редактировалось Sweet, 26.04.2011 в 23:20.
Ответить с цитированием
  #3 (permalink)  
Старый 26.04.2011, 23:40
Интересующийся
Отправить личное сообщение для Goodfella Посмотреть профиль Найти все сообщения от Goodfella
 
Регистрация: 22.02.2011
Сообщений: 11

Да, точно, по непонятным причинам держал в голове присваивание метода как обычное определение функции, вот и не поставил, спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конфликт скриптов, хотя точно не знаю McLotos Элементы интерфейса 2 06.04.2011 11:34
Конфликт двух javascriptов welcomespbcom Javascript под браузер 4 30.03.2011 15:28
нежадные регулярные выражения KOLANICH Общие вопросы Javascript 2 12.12.2010 01:08
Метод определения номера элемента в коллекции.. ZElk Общие вопросы Javascript 1 12.10.2009 15:47
Скрипт определения WMID по WMZ AvaGet Общие вопросы Javascript 3 17.12.2008 03:59