我觉得很傻,但我找不到如何做到这一点的好例子。我已经看到一些接近但也许他们是正确的目标,但我无法弄清楚。
我正在创建一个包含大约6个变量的小应用程序,这些变量必须具有我的应用程序的全局范围。有人可以给我看一个例子吗?
全局变量:
var scene = viewer.scene;
var ellipsoid = scene.globe.ellipsoid;
var entity;
var newPolygon;
var newOutline;
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");
var extensions = gl.getSupportedExtensions();
我在上面名为globals.js
的文件中有上述内容 <script src="Source/globals.js"></script>
<script src="Source/index.js"></script>
<script src="Source/positionHandler.js"></script>
<script src="Source/polyCreate.js"></script>
<script src="Source/polyUpdate.js"></script>
它列在html文件中。所有似乎都工作正常,但有一个浏览器级变量认为它是错误的。所以现在我想确保全局变量可以按预期访问。
Globals = {
scene: require('scene'),
ellipsoid: require('ellipsoid'),
canvas: require('canvas')
};
module.exports = Common;
或
Globals = {
scene: require('viewer.scene'),
ellipsoid: require('scene.globe.ellipsoid'),
canvas: require('document.getElementById("canvas")')
};
module.exports = Common;
或
Globals = {
scene : viewer.scene,
ellipsoid : scene.globe.ellipsoid,
canvas : document.getElementById("canvas"),
gl : canvas.getContext("webgl"),
extensions : gl.getSupportedExtensions()
};
module.exports = Common;
我没有获得要求以及如何设置它。
答案 0 :(得分:1)
这在JavaScript领域有点复杂,取决于你所说的上下文。我假设您正在讨论在浏览器中运行的代码(vs节点),如果是这种情况,最简单的方法是使用名称间距对象。并且暗示在其他回复它的代码之前导入它。
例如,您可以创建包含以下内容的文件globals.js
MyAppGlobals = { property1: "some-value", anotherProperty2: "other-value" };
在html中,只需确保在任何依赖于全局变量的代码之前添加<script src="path/to/globals.js"></script>
。
如果您想要更结构化的方法,请查看webpack等项目。它们很棒,但设置起来有点复杂。
基本上,webpack或browserify允许你编写正确的导入和导出语句(在node.js中的方式),然后执行依赖性分析,并将所有需要的代码“编译”成一个捆绑文件,然后将其包含在HTML。 (有点粗略的描述,但我希望它有所帮助)
答案 1 :(得分:1)
在浏览器中,在函数作用域外声明的任何变量都是全局变量(在窗口对象上设置)。确保你的&#39;&lt;脚本&gt;&#39;标签的顺序正确(在尝试访问它们之前声明你的全局变量)。