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

Uncaught SyntaxError: In strict mode code, functions can only be declared at top level or immediately within another function

本文关键字:函数 声明 另一个 SyntaxError 代码 模式      更新时间:2023-09-26

你好,当我运行这个项目在开发模式(grunt服务器)https://github.com/kennethlynne/generator-angular-xl一切都很好,但当我运行它在生产模式(grunt构建)我得到一个'

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

有人知道发生了什么事吗?谢谢你,

p。我发布了一个项目的链接,而不是代码,因为JS被分割成许多文件。

这就是错误信息所说的:

函数只能在顶层声明,或者直接在另一个函数

中声明

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

的例子:

'use strict';
function some() {
    function okay() {
    }
    let x = 1;
    function no_problem() {
    }
    if (x == 1) {
        function BOOM() {   // <- wrong!
        }
    }
}

正如上面有人建议的那样,您可以取消注释'use strict';部分,或者更好的是,更改函数语法

代替

function funcName (param) { }
使用

funcName = function(param) {}; 

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

EDIT:毕竟这是1.11版本的jQuery缩小错误,一个简单的修复方法是去你的Grunt文件并注释掉

banner: "'use strict';'n"

除了正确的答案之外,这个在某些特定的场景中也可能是FireFox中的一个错误。

在一个用户的机器上出现了这个错误消息。在JavaScript文件中,有一个use strict方法下面,抛出这个错误(不应该受此影响)

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

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

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

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