为什么无法捕获在 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;
}