请查看示例场景,
假设我有一个名为的变量,
var myvariable;
然后在另一个JavaScript文件中,我将值赋给varaiable,
myvariable = "Hi";
我尝试了什么?
基本上,我为此做的是Firebase的custom-email-handler中的newPassword变量。我有另一个页面,您重置密码,但我有一个脚本,它在另一个JavaScript文件中更改密码。
答案 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必须先加载。