如何将一个JavaScript文件中的变量分配给其他JS文件?

时间:2016-12-23 15:12:47

标签: javascript firebase firebase-authentication

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

然后在另一个JavaScript文件中,我将值赋给varaiable,

myvariable = "Hi";

我尝试了什么?

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

2 个答案:

答案 0 :(得分:0)

如果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 implicit global”。

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

答案 1 :(得分:0)

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

script1.js

window.myvariable="Hi";

script2.js

alert(myvariable);

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