2015-06-07 3 views
3

Единственное, что вызывает у меня проблемы, - это вызов анонимной функции. Я даже сделал пустой звонок, чтобы увидеть, есть ли проблемы с кодом внутри; это не так.Анонимные функции, вызывающие проблемы

Это формат я пишу их в:

(function(){})(); 

Я уверен, что это правильно и стандартное использование, но она продолжает бросать этуошибку:

Uncaught TypeError: (intermediate value)(intermediate value)(...) is not a function(anonymous function)

Ошибка при запуске сайта HERE.

фрагмент кода выше не отличается чем то, что в моей программе

+0

Выдает ли определенный код (пустые аргументы, пустое тело) сообщение об ошибке? Если нет, то какой простейший код дает вам ошибку? Если это порождает ошибку, в каком контексте вы ее вызываете, и какой механизм Javascript жалуется на это? Является ли сценарий, единственным содержимым которого является эта строка, дает вам ошибку? – user2357112

+1

Опубликованный код не вызывает ошибок в Chrome 43. Просто попробовал. – joshp

+0

@ user2357112 Точный код (пустая анонимная функция) выдает ошибку. Я использую vanilla js без добавленных библиотек, и есть только 120 строк кода. Я называю это в глобальном масштабе. – Andrew

ответ

8

Код, указывающий на то, что у вас есть проблема

ctrl.deleteObject = function(obj){ 
     var index = ctrl.objects.indexOf(obj); 
     if(index > -1){ 
      this.objects.splice(index, 1); 
     } 
    } 
    //} 


    // //START GAME 
    (function(){ 
    //ctrl.createObject(new PlayerPaddle(50, 50)); 
     //ctrl.init(); 
    })(); 

вскрышные из комментариев, мы получаем

ctrl.deleteObject = function(obj){ 
     var index = ctrl.objects.indexOf(obj); 
     if(index > -1){ 
      this.objects.splice(index, 1); 
     } 
    } 
    (function(){ 
    })(); 

Присваивание ctrl.deleteObject не заканчивающуюся точкой с запятой, а круглые скобки на следующей строке выглядеть как действительное продолжение задания, поэтому Javascript не вставляет точку с запятой для тебя. Вместо назначения и анонимного вызова функции вы вызываете функцию, которую вы пытались назначить ctrl.deleteObject, а затем вызываете ее возвращаемое значение, которое не является функцией.

4

Может быть, у вас есть что-то вроде

(function() { return 123; }) 
(function(){})(); 

становится

(123)(); 

Но 123 не функция. Так он бросает

TypeError: (intermediate value)(...) is not a function

Чтобы это исправить, добавьте точку с запятой:

(function() { return 123; }); // <-- semi-colon 
(function(){})(); // No error 

Обратите внимание на точку с запятой необходима в функциональных выражений, но не обязательно в объявлении функции:

function foo() {} // No semi-colon 
(function(){})(); // No error 
Смежные вопросы