请查看示例场景,假设我有一个名为的变量, var myvariable;
然后在另一个JavaScript文件中,将值分配给varaiable,
myvariable = "Hi";
我尝试了什么?
基本上,我为此所做的是Firebase的custom-email-handler中的newPassword变量。我在另一个页面上可以重置密码,但是在另一个脚本文件中可以在该页面上更改密码。
如果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隐式全局”。
而且,要解决我认为是您最初的困惑点,只需记住所有脚本都在浏览器窗口的上下文中运行。没有“我如何使该脚本与该脚本对话?”的概念。为了帮助看清它是如何工作的,请想象一下获取脚本的内容并将其转储到一个大的脚本文件中。从概念上讲,这就是在浏览器完成所有内容加载之后发生的事情(除非像异步加载这样的高级主题)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句