为什么无法捕获在 io.js 中使用 let 重新声明变量抛出的语法错误
Why the syntax error throw by redeclare a variable using let in io.js can not be catched
这个问题很奇怪io.js 1.0.4
var assert = require('assert');
assert.throws(function(){
let foo = 'foo';
let foo = 'foo';
},SyntaxError
) // test doesn't pass
assert.throws(function(){
throw new SyntaxError('error')
},SyntaxError
) // test pass
SyntaxError
在解析时被抛出,在函数根本没有 运行 之前,例如
console.log('something something');
function fn(){
let x = 4;
let x = 5;
}
这会抛出。请注意,不仅 console.log
不打印任何内容,而且 fn
甚至都不是 运行。所以在你的情况下,你无法捕捉,因为代码甚至还没有开始执行。
请注意,由于 parse time
是此处的关键,因此您可以在需要文件时捕获此类内容。
entry.js
try {
require('./module-file')
} catch (e){
if (e instanceof SyntaxError){
console.log('There was a syntax error');
}
}
模块-file.js
"use strict";
function fn(){
let x = 4;
let x = 5;
}
这个问题很奇怪io.js 1.0.4
var assert = require('assert');
assert.throws(function(){
let foo = 'foo';
let foo = 'foo';
},SyntaxError
) // test doesn't pass
assert.throws(function(){
throw new SyntaxError('error')
},SyntaxError
) // test pass
SyntaxError
在解析时被抛出,在函数根本没有 运行 之前,例如
console.log('something something');
function fn(){
let x = 4;
let x = 5;
}
这会抛出。请注意,不仅 console.log
不打印任何内容,而且 fn
甚至都不是 运行。所以在你的情况下,你无法捕捉,因为代码甚至还没有开始执行。
请注意,由于 parse time
是此处的关键,因此您可以在需要文件时捕获此类内容。
entry.js
try {
require('./module-file')
} catch (e){
if (e instanceof SyntaxError){
console.log('There was a syntax error');
}
}
模块-file.js
"use strict";
function fn(){
let x = 4;
let x = 5;
}