Javascript 函数只能在严格模式的顶层声明
我在使用严格模式的FireFox时出现了这个错误。但我不确定这意味着什么。我假设这意味着在调用函数之前必须声明该函数,但错误仍然发生 SyntaxError:在严格模式代码中,函数只能在顶层声明,或者直接在另一个函数中声明 这是导致错误的代码片段:Javascript 函数只能在严格模式的顶层声明,javascript,Javascript,我在使用严格模式的FireFox时出现了这个错误。但我不确定这意味着什么。我假设这意味着在调用函数之前必须声明该函数,但错误仍然发生 SyntaxError:在严格模式代码中,函数只能在顶层声明,或者直接在另一个函数中声明 这是导致错误的代码片段: var process = new function(){ var self = this; self.test = function(value,callback){ var startTime = Date.now();
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();
}
};
var进程=新函数(){
var self=这个;
self.test=函数(值,回调){
var startTime=Date.now();
函数更新(){/在严格模式下,必须将本地函数置于父函数中其他代码之前:
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();
}
};
var进程=函数(){
var self=这个;
self.test=函数(值,回调){
函数更新(){
值++;
startTime=Date.now();
如果(值<100){
setTimeout(更新,0);
}
回调(值);
}
var startTime=Date.now();
更新();
}
};
本文对此进行了描述:
但在我自己的测试中(与我读过的文章相反),我发现Chrome和Firefox的当前版本都只会抱怨本地函数定义位于块内(如if
或for
语句或类似块内)
我想我需要找到一个实际的规范来看看它是怎么说的。Internet explorer错误明确指出函数名不能在函数中“声明”。因此,使用自调用函数表达式对我来说很有效
此代码失败:
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;
};
此代码适用于:
c.prototype.isitReal=function(t){
var matched = false;
this.each(function(item){
// convert the function to an expression of a function
// by wraping the entire function in ( )
(function getChildren(el){
....
getChildren(el[a].children);
....
// then invoke the function expresion by adding ()
// to the end. Pass in any arguments here also
})(el.children,arg2,arg3);
});
return matched;
};
在FF 76、MSIE 10、Chrome Canary 81中测试,错误为语法错误:在严格模式代码中,函数只能在顶层声明,也可以直接在另一个函数中声明
?哎呀,在格式化问题时,yeh必须删除它,因为这段代码不会导致任何错误。您能否发布一个简单的代码示例来说明您遇到的问题experiencing@JaromandaX可能是因为您没有在Firefox中启用严格模式。鉴于我在Chrome中没有遇到此问题,这是否建议使用严格模式
实际上在Chrome中不起作用?@Dave-当前版本的Chrome和Firefox似乎只在函数位于块内时才会抱怨这个问题(比如在if
语句内)虽然这不是我读过的资料中描述的功能。嗯,对我来说,Chrome还没有给我一个投诉。但是FireFox讨厌一切lol。Chrome似乎没有那么严格=/嗯,我不相信这个答案在规范方面是正确的。“立即”警告中应该提到嵌套,而不是顺序。如果更改这些语句的顺序真的解决了错误,那听起来像是Firefox中的一个错误。另外,请注意ES5和ES6的语法在这个错误上有所不同。错误是针对ES5的,我认为它不适用于ES6。@JMM-浏览器和严格的de已经改变了他们的想法。如果你看第二个代码示例,MDN清楚地说某些东西应该导致语法错误,因为嵌套函数声明在严格模式下是不允许的,但所有当前浏览器都允许。这似乎有点让人困惑。这就是我在2015年写下这个答案的信息。