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