为什么无法捕获使用let in io.js重新声明变量的语法错误

时间:2015-02-05 22:36:19

标签: io.js

这个问题很奇怪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

1 个答案:

答案 0 :(得分:0)

在函数运行之前,

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;
}