Javascript - 从浏览器中的另一个模块设置“让”变量
Posted
技术标签:
【中文标题】Javascript - 从浏览器中的另一个模块设置“让”变量【英文标题】:Javascript - Set a 'let' variable from another module in browser 【发布时间】: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 = ....
一样使用
【参考方案1】:
您可以在 globals.js 文件中执行以下操作:
export default scale: 1
在其他模块中,像这样使用它:
import global from "global"
global.scale = ...
... = global.scale
【讨论】:
以上是关于Javascript - 从浏览器中的另一个模块设置“让”变量的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot 无法从多模块 Java 应用程序中的另一个模块识别 RestController
AngularJS 控制器可以从同一模块中的另一个控制器继承吗?