Kua*_*uan 10 javascript google-chrome node.js ecmascript-6
我是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();
Run Code Online (Sandbox Code Playgroud)
我想知道为什么Chrome(第49版)没有给出任何错误,但是Node.js可以给出" SyntaxError:在严格模式代码中,函数只能在顶级或者在另一个函数中声明. "
此表指出我的Chrome应报告错误.
小智 10
您正在使用的Node.js版本(0.12.9)使用较旧版本的V8 JavaScript引擎(3.28.71.19),该版本不遵循ECMAScript 6中添加的新功能声明范围规则.您可以使用Chrome的版本re using(49)使用新版本的V8(4.9.385),它支持新规则,至少在严格模式下.
在ECMAScript 6之前,函数声明将作用于包含函数.例如:
function main() {
if (true) {
function example() {};
console.log(example); // function example() {}
}
console.log(example); // function example() {}
}
Run Code Online (Sandbox Code Playgroud)
这被认为是令人困惑的行为,因此在严格模式下被禁止,导致您在Node中看到的错误.
在ECMAScript 6中,函数声明的范围改为最近的块.块是包含两个括号({ ... })之间的任何一系列语句,例如跟在if语句之后.
function main() {
'use strict';
if (true) {
function example() {};
console.log(example); // function example() {}
}
console.log(example); // ReferenceError: example is not defined
}
Run Code Online (Sandbox Code Playgroud)
这种行为更有意,更少混淆,因此在严格模式下是允许的.
但是,测试这一点有点令人困惑,因为Chrome目前仅在严格模式下启用某些ES6规则.
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |