【发布时间】:2016-08-13 20:27:39
【问题描述】:
当我使用如下代码时,我对 JS "strict mode"; 还是很陌生:
function outer(){
"use strict";
var ctype;
function inner(){
if(ctype!=undefined){
function hello1(){
console.log("hello1");
}
hello1()
}else {
function hello2(){
console.log("hello2");
}
hello2();
}
}
return inner;
}
var inner = outer();
inner();
我想知道为什么 Chrome(版本 49)没有给出错误,但 Node.js 会给出“SyntaxError:在严格模式代码中,函数只能在顶层或立即在另一个函数中声明。 "
This table指出我的Chrome应该报错。
【问题讨论】:
-
@DanD。谢谢,所以这意味着 Chrome 不使用我的代码而是更改代码然后在严格模式下检查它?
-
添加 [node.js] 标签,因为这个问题是将其行为与 Chrome 进行比较(而不是与规范或其他内容进行比较)。
-
似乎是一个错误。解析器应该在它有机会运行之前抛出一个 SyntaxError。甚至不需要调用,就像在这个更简单的演示中一样:jsfiddle.net/6zr12q7v
-
ES6 没有添加允许它的功能,是吗?由于块现在可以创建范围,我想知道现在是否允许这种语法。
-
@squint Huh... 根据this post,你是对的,ES6 修改了
function声明以使用块作用域而不是函数作用域。我以为他们只对let/const/class这样的新结构使用块作用域。看来我们有答案了。
标签: javascript node.js google-chrome ecmascript-6