我有以下try/catch
:
try {
var { app } = require('electron').remote;
} catch (e) {
var { app } = require('electron');
}
即使它有效,ESLint也会遇到一个问题,即app
已被宣布。
所以,我尝试将var移到try/catch
之上,并且=
的错误表示它是Unexpected token
,如此:
var app;
try {
{ app } = require('electron').remote;
} catch (e) {
{ app } = require('electron');
}
这样做的正确方法是什么,所以ESLint没有抱怨?
答案 0 :(得分:3)
首先,由于您明确使用ES2015 +(又名" ES6 +"),请查看使用let
或const
而不是var
。在ES2015 +世界中var
基本没用。 (但下面的两个内容也适用于var
。)
解析问题是因为{
看起来像一个块的开头。您可以将整个作业包装在()
中以解决这个问题:
let app;
try {
({ app } = require('electron').remote);
} catch (e) {
({ app } = require('electron'));
}
示例(伪造require
):
// fake require
function require(name) {
return {app: {name: "I'm the app"}};
}
let app;
try {
({ app } = require('electon').remote);
} catch (e) {
({ app } = require('electron'));
}
console.log(app);

或者根本不使用解构:
let app;
try {
app = require('electron').remote.app;
} catch (e) {
app = require('electron').app;
}
// fake require
function require(name) {
return {app: {name: "I'm the app"}};
}
let app;
try {
app = require('electron').remote.app;
} catch (e) {
app = require('electron').app;
}
console.log(app);

答案 1 :(得分:-1)
var
声明当前函数范围内的值。 try
语句不会创建这种范围,因此您需要在初始代码中重新声明app
。这就是为什么它没有通过掉毛。
如果只在let
或var
块中需要app
,则可以使用try
代替catch
。