【问题标题】:Uncaught TypeError: Assignment to constant variable in javascript module未捕获的 TypeError:分配给 javascript 模块中的常量变量
【发布时间】:2022-03-03 05:38:08
【问题描述】:

我在一个模块中声明了一个变量,如下所示:

// first.js

var folder;
export {folder};

我想从不同的模块中使用它,像这样:

// second.js

import { folder} from '../js/first.js';
folder = gui.addFolder( 'Avatar Measurements' );`

TypeError: Assignment to constant variable.

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    导入是导出模块中原始变量的只读实时绑定。 “只读”部分意味着您不能直接修改它们。 “实时”部分意味着您可以看到导出模块对它们所做的任何修改。

    如果您有一个模块需要允许其他模块修改其导出的值(这是/应该是罕见的),它需要导出一个执行此操作的函数。例如:

    a.js:

    export let folder;
    export function setFolder(f) {
        folder = f;
    }
    

    b.js:

    import { folder, setFolder } from "./a.js";
    
    console.log(folder); // This will be `undefined` unless another module has already modified it
    setFolder(gui.addFolder("Avatar Measurements"));
    console.log(folder); // This will be whatever `gui.addFolder` returns
    

    同样,一个模块允许其他模块以这种方式修改其导出的情况/应该是非常罕见的。


    在 cmets 中,您要求我提供一个为此导出对象的示例:

    a.js:

    export let shapes = {};
    

    b.js:

    import { shapes } from "./a.js";
    
    shape.folder = gui.addFolder("Avatar Measurements");
    

    但我不清楚为什么该对象需要存在于a 而不仅仅是在b 中的本地。

    【讨论】:

    • 变量这么多,这样都好么。或者有任何其他语法。现在这是代码文件夹 == gui.addFolder('Avatar Measurements');上 == gui.addFolder('上测量'); lower == gui.addFolder('下测量'); reset == gui.add(params, 'reset').name("Reset"); save == gui.add(params, 'save').name("保存头像");
    • @Deepak3301086 - 对我来说,这听起来像是你需要改变你的模块结构。我不清楚为什么您有一个模块导出变量而另一个模块试图更改它们。这有点危险。但是如果没有更多的上下文,很难提出替代方案。替代方法包括导出一个可变对象,或者让正在修改的模块拥有变量,或者......
    • 感谢您的快速回复,我有 14 种形状,每个形状都定义在一个模块中。在一个公共模块中我声明了变量并尝试在所有模块中使用这些变量。
    • 它就像一个形状有不同的测量值,第二个形状有不同的测量值等等。所以我将测量值​​用作不同模块中的常用值和填充值。
    • @Deepak3301086 - 听起来你想要一个对象,而不是单个变量,但从那个描述来看,很难确定。
    【解决方案2】:

    这是因为您在从 ../js/first.js 导入 folder 时创建了一个 folder 常量。您不能将值重新分配给任何常量,包括 folder不要使用=====,因为它们是比较运算符,不会更改folder 的值。

    如果您想将信息从second.js 传递到first.js,请考虑从second.js 导出一个函数。如果不这样做,请为变量使用另一个名称,例如 folder_(不要忘记先声明它:var folder_;)。

    【讨论】:

    • 我不想重新分配它,请告诉我如何在不导入的情况下获取 second.js 中的文件夹。是的,我已将信息从 second 传递到 first.js
    • 那你想做什么?
    • 我有 14 个人体形状,每个身体都有不同的尺寸。所以就像我定义了一个变量测量,并在每个形状中使用它。并在公共模块中显示所选形状的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多