app已在try / catch中声明

时间:2017-02-01 18:29:58

标签: javascript electron eslint

我有以下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没有抱怨?

2 个答案:

答案 0 :(得分:3)

首先,由于您明确使用ES2015 +(又名" ES6 +"),请查看使用letconst而不是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。这就是为什么它没有通过掉毛。

如果只在letvar块中需要app,则可以使用try代替catch