可以在严格模式下仅在顶级声明函数

Sir*_*Sir 5 javascript

使用严格模式的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中不会出现此问题?

jfr*_*d00 8

您必须在严格模式下将本地函数放在父函数中的其他代码之前:

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)

这篇文章对此进行了描述:

新的ES5严格模式要求:禁止在程序或功能的顶级功能语句

MDN严格模式

在我自己的测试中(和我读过的文章相反),我发现当前版本的Chrome和Firefox只会抱怨一个本地函数定义,如果它在一个块内(比如在一个if或一个for语句或类似的块里面) .

我想我需要找一个实际的规格来看看说的是什么.