未捕获的SyntaxError:在严格模式代码中,函数只能在顶层声明或在另一个函数中立即声明

时间:2014-07-04 11:14:53

标签: javascript angularjs strict

你好,当我在开发者模式下运行这个项目时(grunt服务器)https://github.com/kennethlynne/generator-angular-xl一切正常但是当我在生产模式下运行它时(grunt build)我得到了一个`

  

Uncaught SyntaxError:在严格模式代码中,函数只能是   在顶层声明或在另一个函数中立即声明

任何人都知道发生了什么事吗? 谢谢,

聚苯乙烯。我发布了一个项目链接,而不是代码,因为JS被分成许多文件。

5 个答案:

答案 0 :(得分:18)

这就是错误信息所说的内容:

  

函数只能在顶层声明或在另一个函数中立即声明

一定不能在任何其他块中放置一个函数声明,比如if语句或for循环。

示例:

'use strict';

function some() {

    function okay() {
    }

    let x = 1;

    function no_problem() {
    }

    if (x == 1) {

        function BOOM() {   // <- wrong!
        }
    }
}

答案 1 :(得分:7)

如上所述,您可以取消注释'use strict';部分,甚至更好地更改函数语法

而不是

function funcName (param) { }

使用

funcName = function(param) {}; 

答案 2 :(得分:6)

我解决问题的方法是删除最终缩小脚本中jquery上方的'use strict'。另一种方法是将jQuery版本更改为没有严格错误的版本

编辑:毕竟这是版本1.11上的jQuery缩小错误,对此的一个简单修复是转到您的Grunt文件并注释掉该行

banner: "'use strict';\n"

答案 3 :(得分:1)

除了正确答案之外,在某些特定情况下,可能也是FireFox中的错误。

我们在一个用户的计算机上收到此错误消息。在JavaScript文件中,有一个use strict 引发此错误的方法(不应受此影响)

这恰好是FireFox版本45.9.0(也可能是旧版本)的问题。将Firefox更新到最新版本(目前为52.4)解决了这个问题。

答案 4 :(得分:0)

有趣的是,我的原因是因为emacs被放在了新行上,但是我返回了一个对象,所以我改变了

来自

{

"use strict";
var funcName1 = function(){
    /* some code*/
    return
    { // note this bracket
        funcName2:function(){/* some code*/},
    };
}