Javascript 如何在arrow函数内部分配外部变量?
我试图为一个在arrow函数之外定义的变量赋值,如下所示:Javascript 如何在arrow函数内部分配外部变量?,javascript,typescript,Javascript,Typescript,我试图为一个在arrow函数之外定义的变量赋值,如下所示: let leftPanel: PerspectivePanel; let rightPanel: PerspectivePanel; let temp = L.withFlex(1, L.box(direction, [ L.withFlex( 1, element => { element.className = 'gllayo
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;
但是编译器给我的错误是,变量在定义之前正在使用。如何使内部变量对外可见
编辑:我不明白的是,在它下面的两个赋值之后,如何调用箭头函数get。因为它显然是在他们前面被调用的,元素是rootElement。编译器正在抱怨,因为
leftPanel
和rightPanel
可能还没有被赋值。这是因为它们首先在一个arrow函数中赋值,在编译时调用它们时是未知的
我假设您使用stricnullchecks:true
。在这种情况下,您可以通过明确说明两个变量中的每一个都可以是未定义的,然后使用类型断言来解决此问题:
let leftPanel: PerspectivePanel | undefined;
let rightPanel: PerspectivePanel | undefined;
...
leftPanel!.otherRenderedDataPanel = rightPanel!;
rightPanel!.otherRenderedDataPanel = leftPanel!;
编译器正在抱怨,因为可能尚未分配
leftPanel
和rightPanel
。这是因为它们首先在一个arrow函数中赋值,在编译时调用它们时是未知的
我假设您使用stricnullchecks:true
。在这种情况下,您可以通过明确说明两个变量中的每一个都可以是未定义的,然后使用类型断言来解决此问题:
let leftPanel: PerspectivePanel | undefined;
let rightPanel: PerspectivePanel | undefined;
...
leftPanel!.otherRenderedDataPanel = rightPanel!;
rightPanel!.otherRenderedDataPanel = leftPanel!;
我通过将reft和right Panel定义为类属性并在arrow函数内部执行
this.rightPanel.otherPanel=leftPanel
解决了这个问题。我仍然不知道为什么另一种方法不起作用,但这对我来说是一种解决办法。我通过将reft和right Panel定义为类属性,并在arrow函数内部执行我可以执行的操作来解决这个问题。this.rightPanel.otherPanel=leftPanel
。我仍然不知道为什么另一种方法不起作用,但这对我来说是一种解决办法。我想它是说对于leftPanel.otherRenderDataPanel=…
赋值行和下面的一行?请提供一个简单的工作示例。我必须在你的例子中定义很多东西,以便让它达到可以看到错误的地方。。。但是我怀疑您可以在不丢失所有类型的情况下创建错误。是的,leftPanel.OtherRenderDataPanel行。给出了错误。我假设它是说,对于leftPanel.OtherRenderDataPanel=…
赋值行和下面的一行,请提供一个最小的工作示例。我必须在你的例子中定义很多东西,以便让它达到可以看到错误的地方。。。但是我怀疑您可以在不丢失所有类型的情况下创建错误。是的,leftPanel.otherRenderedDataPanel行给出了错误。很好的建议,但是我得到类型“RenderedDataPanel | undefined”不能分配给类型“RenderedDataPanel”。类型“undefined”不可分配给类型“RenderDataPanel”
。对,这就是为什么需要非空断言(标识符后面的!)。我知道它没有帮助。很好的建议,但是我得到类型“RenderDataPanel | undefined”不可分配给类型“RenderDataPanel”。类型“undefined”不可分配给类型“RenderDataPanel”
。这就是为什么需要非空断言(标识符后面的“!”)的原因。我知道它没有帮助。