【发布时间】:2018-03-13 13:16:17
【问题描述】:
具体来说,我正在最新版本的 Google Chrome 中对此进行测试,但我怀疑这在 Edge/Firefox/Safari 中是一样的(最后我知道 Edge 和 Firefox 的模块隐藏在实验性 javascript 标志中)
在“globals.js”中,我有一个缩放比例。
// inside global.js
let scale = 1;
在另一个模块中,我想调整比例
// inside another js file
import { scale } from "../JS/globals.js";
scale = Math.min( scale + ((scale + delta) * speed), target);
但我收到错误“分配给常量变量”。
我想到了一种明显的方法,就是导出一个名为 set_scale 的函数
// back in globals.js
export function set_scale (value) { scale = value };
我已经为 globals.js 中的一些其他变量做了这个。 但我想知道是否有人有任何其他方法可以克服导出/导入 let 作为常量,特别是如果它可以让我避免做更多的事情来导出/导入。
【问题讨论】:
-
您使用的是什么模块加载器。如果我用 node.js (common.js) 来做这个。在 global.js 里面我会有
module.exports = {scale: 1};。那么如果我想改变..const g = require("./globals"); g.scale = ... -
它在 chrome 中。他们最近在实际浏览器中启用了导出+导入。我最初不知道它是否可以在 firefox 或 edge 中工作,但据我所知,safari 已经实现了它,其他浏览器将模块隐藏在实验标志后面,chrome 直到最近还把它隐藏在他们的金丝雀浏览器中但现在它在最新版本中可用。抱歉,我忘记了这一点,我将更新问题以指定这是针对浏览器的问题。
-
你应该可以做同样的事情,但是使用新的 ES6 语法,而不是 common.js。另外->
scale =你不能这样做,它是从scale得到的吗?您很可能想要global.scale.. 这可能是您收到错误的原因。 -
你不能那样做......那个导入将相当于
const scale = globals.scale,从对象级别访问,你会没事的...... -
我会做 ->
export default { scale: 1}和import global from "global"然后像global.scale = ....一样使用
标签: javascript module ecmascript-6 constants let