所以我已经取代了一个非常全面的AngularJS应用程序,该应用程序使用RequireJS进行模块化,并且还使用Grunt(RequireJS优化器插件)来编译代码并将其缩小。
缩小的代码在Firefox中给出了以下错误:
“SyntaxError:在严格模式代码中,函数可能只在顶层声明或在另一个函数中立即声明”
在Safari中:
“SyntaxError:严格模式不允许在词法嵌套语句中使用函数声明。”
以下是代码的第一部分:
Name Gender Salary Dept_Name
Richie male 8604 NULL
Richie male 8604 NULL
Richie male 8604 NULL
Richie male 8604 NULL
Lisan female 20776 NULL
Lisan female 20776 NULL
Lisan female 20776 NULL
Lisan female 20776 NULL
“
代码在编译,连接和缩小之前工作正常。
任何人都有什么建议来解决这个问题?
答案 0 :(得分:0)
这是一个棘手的错误,因为它涉及ECMAScript的浏览器特定实现的细微差别。如果您有兴趣,可以快速分解:ES5 Strict Mode Requirements。
该错误基本上分解为一个函数被声明的地方不应该这样。这通常只是由浏览器“处理”,但是向前移动(并且在strict mode
中)浏览器将停止帮助,并简单地抛出错误。对此的简单解决方案是在不将其分配给局部变量的情况下永远不会声明函数。 let fn = function(){...}
而不是function fn(){...}
。您仍然使用相同的函数[例如:var a = fn()
],但它现在与您指定给它的变量的范围相关联。这使得理解和调试更容易,因为它遵循与任何其他变量声明相同的规则。它在声明之前是未定义的(所以在声明它之前不要调用它),它只能在它的范围内使用(所以如果你在函数中声明它,它只在该函数中可用),它可以随时被覆盖或更改。
我没有看到您发布的代码中引发的错误,因此可能会发生在此模块中更深层次的某个位置。你能发布完整的文件吗?