匿名函数导致问题

Anonymous Function Causing Problems

唯一给我带来问题的是执行匿名函数调用。我什至打了一个空电话,看看里面的代码有没有问题;事实并非如此。

这是我写的格式:

(function(){})(); 

我确信这是正确的标准用法,但它一直抛出 this error:

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

在站点 运行 时可以找到错误 HERE

上面的代码摘录与我程序中的代码没有什么不同

也许你有类似的东西

(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

给您带来麻烦的代码是

    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 的函数,然后调用它的 return 值,这不是函数。