如何在箭头函数内部分配外部var?

时间:2017-01-18 16:29:44

标签: javascript typescript

我试图为一个在箭头函数之外定义的变量赋值,如下所示:

    let leftPanel: PerspectivePanel;
    let rightPanel: PerspectivePanel;

    let temp = L.withFlex(1, L.box(direction, [
      L.withFlex(
          1,
          element => {
            element.className = 'gllayoutcell noselect';
            leftPanel = new PerspectivePanel(display, element, perspectiveViewerState);
            this.registerDisposer(leftPanel);
          }),
      L.withFlex(
          1,
          element => {
            element.className = 'gllayoutcell noselect';
            rightPanel = new PerspectivePanel(display, element, perspectiveViewerState2);
            this.registerDisposer(rightPanel);
          }),
    ]))(rootElement);

    leftPanel.otherRenderedDataPanel = rightPanel;
    rightPanel.otherRenderedDataPanel = leftPanel;

但是编译器给出了我在定义之前使用变量的错误。如何在外部看到变量?

编辑:我不明白箭头功能在它下面的两个分配之后被调用的方式。因为很明显它在它们之前被调用,元素是rootElement。

2 个答案:

答案 0 :(得分:0)

编译器抱怨,因为leftPanelrightPanel可能尚未分配。这是因为它们首先在你的一个箭头函数中被赋值,在编译时它们将被调用时是未知的。

我假设您使用strictNullChecks: true。在这种情况下,您可以通过明确声明两个变量中的每一个都可以是undefined然后使用类型断言来解决此问题:

let leftPanel: PerspectivePanel | undefined;
let rightPanel: PerspectivePanel | undefined;

...

leftPanel!.otherRenderedDataPanel = rightPanel!;
rightPanel!.otherRenderedDataPanel = leftPanel!;

答案 1 :(得分:0)

我通过将reft和right Panel定义为类属性并在箭头函数中定义classB来解决问题。我仍然不知道为什么其他方法不起作用,但这对我来说是一种解决方法。