我可以从另一个文件访问变量吗?

IT技术 javascript scope
2021-01-28 17:14:01

是否可以first.js在另一个名为的文件内调用的文件中使用变量second.js

first.js包含一个名为 的变量colorcodes

6个回答

正如 Fermin 所说,全局范围内的变量应该可以被声明后加载的所有脚本访问。您还可以使用windowor (在全局范围内)的属性this来获得相同的效果。

// first.js
var colorCodes = {

  back  : "#fff",
  front : "#888",
  side  : "#369"

};

...在另一个文件...

// second.js
alert (colorCodes.back); // alerts `#fff`

...在您的 html 文件中 ...

<script type="text/javascript" src="first.js"></script> 
<script type="text/javascript" src="second.js"></script> 
在浏览器中,window 全局范围 - 所以 window.colorCodes 和(全局)对象 colorCodes 是同一个对象。
2021-03-14 17:14:01
真的......我提到它的原因是在您需要从非全局范围设置全局变量的情况下。
2021-03-24 17:14:01
@user25,我有同样的问题,你找到解决方案了吗?
2021-03-24 17:14:01
如果您使用的是 eslint,您可以/* global colorCodes */在上面的行中添加以防止“...未定义”错误消息
2021-03-27 17:14:01
html呢?在 html 中我有:<script>var variable1 = true;</script> <script src="first.js"></script>first.js 会看到那个变量吗?我在 Google Chrome 扩展程序中测试了它,但它不起作用
2021-03-30 17:14:01

您可以使用export从第一个文件导出变量

//first.js
const colorCode = {
    black: "#000",
    white: "#fff"
};
export { colorCode };

然后,使用import在第二个文件中导入变量

//second.js
import { colorCode } from './first.js'

导出 - MDN

const在示例中并谈论variable- 我错过了什么吗?如果我这样做并使用一个变量var并尝试分配,那么至少在 Chrome 扩展程序中它会抱怨“无法设置 #<Object> 的属性 XXX,它只有一个 getter”。如果这只能通过const/read- only 来完成,那么这是一个极具误导性的答案。
2021-03-24 17:14:01
const是变量的一种。var也是变量的一种。它们是两种不同的变量,具有不同的特征。答案没有误导性,您只是为您的用例使用了错误类型的变量。这不能用 const 来完成——它们在初始化后是不可变的。您可以在此处了解不同的变量声明:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-03-24 17:14:01

我确实喜欢上面所说的答案,但是虽然它对我不起作用

因为我是JQuery 的declaring这些变量inside$( document ).ready()

所以确保你在<script>标签内而不是其他地方声明你的变量

使用 Node.js,您可以通过module导出变量。

//first.js
const colorCode = {
    black: "#000",
    white: "#fff"
};
module.exports = { colorCode };

然后,使用 require 在第二个文件中导入module/变量。

//second.js
const { colorCode } = require('./first.js')

您可以使用Webpack/Babel 使用 ES6 中importexport方法,但在 Node.js 中您需要启用一个标志,并使用 .mjs 扩展名。

是否必须是 const 才能导出它?
2021-04-03 17:14:01
在 Node.js 中,情况不再如此。您可以简单地type: module在 package.json 文件中添加以本地使用导入/导出。
2021-04-06 17:14:01

这应该有效 - 在 firstfile 中定义一个全局变量并从 secondfile 访问它:

<script src="/firstfile.js"></script>
<script src="/secondfile.js"></script>

第一个文件.js:

var colors = {
   text:'#000000',
   background:'#aaaaaa',
   something_else:'blue'
};

第二个文件.js:

do_something_with(colors.background);

请注意,加载脚本文件的顺序对于某些浏览器(当然是 IE6,也可能是其他浏览器)很重要

您可能需要将该变量附加到对象上,例如:this.colors = colors。如果它是一个对象而不是枚举,则可以创建一个函数来仅返回该值。this.getTextColor = function() { return colors.text; };
2021-03-18 17:14:01
您将如何从加载的页面更新变量?<script type="text/javascript">colors.background="new col"; </script> 似乎不起作用。
2021-03-19 17:14:01