【问题标题】:How can I assign a variable from one JavaScript file to other JS File?如何将一个 JavaScript 文件中的变量分配给另一个 JS 文件?
【发布时间】:2016-12-23 15:12:46
【问题描述】:

请看示例场景, 假设我有一个名为的变量, var myvariable;

然后在另一个 JavaScript 文件中,我将值分配给变量,

myvariable = "Hi";

我尝试了什么?

基本上,我为此所做的是 Firebase 的 custom-email-handler 中的 newPassword 变量。我有另一个页面,您可以在其中重置密码,但我有脚本可以在另一个 JavaScript 文件中更改密码。

【问题讨论】:

  • 您是否已将脚本加载到文档中,或者您只想在文件级别执行此操作?
  • 我可以将脚本加载到文档中。

标签: javascript firebase firebase-authentication


【解决方案1】:

如果myvariable 在全局范围内,意味着它没有包含在任何函数中,则默认情况下它可用于所有其他脚本。而且,令人沮丧的是,如果您确实在另一个函数中声明它,但在声明它时忘记使用“var”,它也会最终进入全局范围。

考虑一下:

<script src="script1.js"></script>
<script src="script2.js"></script>

script1.js:

var myvariable = "hi";

script2.js:

console.log(myvariable);
// "hi"

当页面加载时,“hi”将被打印到控制台,因为script1.js被列在了第一位

与此相反:

<script src="script1.js"></script>
<script src="script2.js"></script>

script1.js:

function() {
    var myvariable = "hi";
}

script2.js:

console.log(myvariable);
// Uncaught ReferenceError: myvariable is not defined

页面加载时,script2.js 会抛出错误,因为它无法看到myvariable,因为它被锁定在函数范围内。

最后一个案例

<script src="script1.js"></script>
<script src="script2.js"></script>

script1.js:

var myFunc = function() {
    //notice I'm not going to use "var" in front of myvariable
    myvariable = "hi";
}
//As soon as you call the function, myvariable is now global. Oops!
myFunc();

script2.js:

console.log(myvariable);
// "hi"

如果您想了解有关此主题的更多信息,只需搜索“javascript 范围”、“javascript 全局范围”或“javascript 隐式全局”即可。

并且,为了解决我认为您最初的困惑点,请记住所有脚本都在浏览器窗口的上下文中运行。没有“如何让这个脚本与那个脚本对话?”的概念。为了帮助直观地了解它的工作原理,想象一下获取脚本的内容并将其转储到一个大脚本文件中。从概念上讲,这就是浏览器加载完所有内容后会发生的事情,(除了异步加载等高级主题)

【讨论】:

    【解决方案2】:

    您应该通过将其添加到窗口对象来使其成为全局对象。

    script1.js

    window.myvariable="Hi";
    

    script2.js

    alert(myvariable);
    

    请注意,必须先加载 script1.js。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      相关资源
      最近更新 更多