Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有RequireJS的AngularJS应用程序给出;使用“严格的”;Safari&;火狐_Javascript_Angularjs_Gruntjs_Requirejs - Fatal编程技术网

Javascript 带有RequireJS的AngularJS应用程序给出;使用“严格的”;Safari&;火狐

Javascript 带有RequireJS的AngularJS应用程序给出;使用“严格的”;Safari&;火狐,javascript,angularjs,gruntjs,requirejs,Javascript,Angularjs,Gruntjs,Requirejs,因此,我已经超越了一个非常全面的AngularJS应用程序,它使用RequireJS进行模块化,还使用Grunt(RequireJS优化器插件)编译代码并缩小它 缩小的代码在Firefox中显示以下错误: SyntaxError:在严格模式代码中,函数只能在顶层声明,或直接在另一个函数中声明 在狩猎中: “SyntaxError:严格模式不允许在词汇嵌套语句中声明函数。” 以下是代码的第一部分: function(e, t, n) { "use strict"; function r(e) {

因此,我已经超越了一个非常全面的AngularJS应用程序,它使用RequireJS进行模块化,还使用Grunt(RequireJS优化器插件)编译代码并缩小它

缩小的代码在Firefox中显示以下错误:

SyntaxError:在严格模式代码中,函数只能在顶层声明,或直接在另一个函数中声明

在狩猎中:

“SyntaxError:严格模式不允许在词汇嵌套语句中声明函数。”

以下是代码的第一部分:

function(e, t, n) {
"use strict";

function r(e) {
    return function() {
        var t = arguments[0],
            n = "[" + (e ? e + ":" : "") + t + "] ",
            r = arguments[1],
            i = arguments,
            s = function(e) {
                return typeof e == "function" ? e.toString().replace(/ \{[\s\S]*$/, "") : typeof e == "undefined" ? "undefined" : typeof e != "string" ? JSON.stringify(e) : e
            },
            o, u;
        o = n + r.replace(/\{\d+\}/g, function(e) {
            var t = +e.slice(1, -1),
                n;
            if (t + 2 < i.length) return n = i[t + 2], typeof n == "function" ? n.toString().replace(/ ?\{[\s\S]*$/, "") : typeof n == "undefined" ? "undefined" : typeof n != "string" ? ht(n) : n;
            return e
        }), o = o + "\nhttp://errors.angularjs.org/1.2.29/" + (e ? e + "/" : "") + t;
        for (u = 2; u < arguments.length; u++) o = o + (u == 2 ? "?" : "&") + "p" + (u - 2) + "=" + encodeURIComponent(s(arguments[u]));
        return new Error(o)
    }
}

function E(e) {
    if (e == null || z(e)) return !1;
    var t = e.length;
    return e.nodeType === 1 && t ? !0 : j(e) || q(e) || t === 0 || typeof t == "number" && t > 0 && t - 1 in e
}

function S(e, t, n) {
    var r;
    if (e)
        if (R(e))
            for (r in e) r != "prototype" && r != "length" && r != "name" && (!e.hasOwnProperty || e.hasOwnProperty(r)) && t.call(n, e[r], r);
        else if (q(e) || E(e))
        for (r = 0; r < e.length; r++) t.call(n, e[r], r);
    else if (e.forEach && e.forEach !== S) e.forEach(t, n);
    else
        for (r in e) e.hasOwnProperty(r) && t.call(n, e[r], r);
    return e
}
函数(e,t,n){
“严格使用”;
函数r(e){
返回函数(){
var t=参数[0],
n=“[”+(e?e+):“)+t+”],
r=参数[1],
i=参数,
s=函数(e){
返回typeof e==“function”?e.toString()。replace(/\{[\s\s]*$/,”):typeof e==“undefined”?“undefined”:typeof e!=“string”?JSON.stringify(e):e
},
o、 u;
o=n+r.replace(/\{\d+\}/g,函数(e){
变量t=+e.slice(1,-1),
N
如果(t+20&&t-1
}
函数S(e,t,n){
var-r;
如果(e)
if(R(e))
对于(e中的r)r!=“原型”&&r!=“长度”&&r!=“名称”&(!e.hasOwnProperty | | e.hasOwnProperty(r))&&t.call(n,e[r],r);
else如果(q(e)| e(e))
对于(r=0;r
"

代码在编译、具体化和缩小之前工作良好


有人对如何解决这个问题有什么建议吗?

这是一个很严重的错误,因为它涉及到特定于浏览器的ECMAScript实现的细微差别。如果您感兴趣,这里有一个快速细分:

这个错误本质上可以归结为函数被声明在不应该声明的地方。这通常只是由浏览器“处理”的,但会继续(并且在
严格模式下
)浏览器将停止对此进行帮助,并简单地抛出一个错误。解决此问题的简单方法是,在未将函数分配给局部变量的情况下,永远不要声明函数。
让fn=function(){…}
而不是
function fn(){…}
。您仍然使用相同的函数[ex:
var a=fn()
],但它现在绑定到您分配给它的变量的范围。这使它更易于理解和调试,因为它遵循与任何其他变量声明相同的规则。它在声明之前是未定义的(因此在声明之前不要调用它),它仅在其范围内可用(因此,如果您在函数中声明它,它仅在该函数中可用),并且它可以随时被覆盖或更改


我没有看到您发布的代码引发错误,因此它可能发生在本模块的深层。您能发布完整的文件吗?

谢谢您的快速回答。基本上我美化了js,发现一些添加的代码确实是if语句中的函数声明。我不熟悉r有了严格使用的需求,特别是因为我不习惯使用严格,而我正在处理的是其他人的代码。