使用严格模式的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();
}
};
Run Code Online (Sandbox Code Playgroud)
所以我想知道如何用严格的方法正确编写这段代码?顶级是什么意思?这是指全局定义而不是函数中的本地定义?
另外,我知道use strict为什么Chrome中不会出现此问题?
您必须在严格模式下将本地函数放在父函数中的其他代码之前:
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();
}
};
Run Code Online (Sandbox Code Playgroud)
这篇文章对此进行了描述:
在我自己的测试中(和我读过的文章相反),我发现当前版本的Chrome和Firefox只会抱怨一个本地函数定义,如果它在一个块内(比如在一个if或一个for语句或类似的块里面) .
我想我需要找一个实际的规格来看看说的是什么.