2015-06-07 56 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