使用具有严格模式的FireFox时出现此错误。但我不确定这意味着什么。我认为这意味着函数必须在调用之前声明,但错误仍然存在。
SyntaxError:在严格模式代码中,函数只能在顶级或紧接在另一个函数中声明
这是我的代码片段,它导致错误:
var process = new function(){
var self = this;
self.test = function(value,callback){
var startTime = Date.now();
function update(){ //<--- error is here
value++;
startTime = Date.now();
if(value < 100){
setTimeout(update, 0);
}
callback(value);
}
update();
}
};
所以我想知道如何用严格的方法正确编写这段代码?顶级是什么意思?这是指全局定义而不是函数中的本地定义吗?
另外,我有use strict
为什么Chrome中不会出现此问题?
答案 0 :(得分:6)
您必须在严格模式下将本地函数放在父函数中的其他代码之前:
var process = function () {
var self = this;
self.test = function (value, callback) {
function update() {
value++;
startTime = Date.now();
if (value < 100) {
setTimeout(update, 0);
}
callback(value);
}
var startTime = Date.now();
update();
}
};
本文描述了这一点:
在我自己的测试中(与我读过的文章相反),我发现当前版本的Chrome和Firefox只会抱怨本地函数定义(如果它位于块内)(例如{ {1}}或if
语句或类似的块。
我想我需要找一个实际的规格来看看说的是什么。
答案 1 :(得分:0)
Internet Explorer错误明确指出不能在函数中“声明”函数名称。因此,使用自调用函数表达式对我有用。
此代码失败:
Controlling Log Levels with Properties
Log levels can be configured via properties defined in application.yml (and environment variables) with the log.level prefix:
logger:
levels:
foo.bar: ERROR
Note that the ability to control log levels via config is controlled via the LoggingSystem interface. Currently Micronaut ships with a single implementation that allows setting log levels for the Logback library. If another library is chosen you should provide a bean that implements this interface.
此代码有效:
c.prototype.isitReal=function(t){
var matched = false;
this.each(function(item){
// declaring a new function within a function fails
function getChildren(el){
....
getChildren(el[a].children);
....
}
getChildren(el.children); // invoke function
});
return matched;
};
在FF 76,MSIE 10,Chrome Canary 81中经过测试