JS中声明全局变量主要分为显式声明或者隐式声明。
1.显示声明:
使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量;在function内部声明的是局部变量。
<script>
var global= '我是全局变量';//全局变量
function a(){
var part= '我是局部变量';//局部变量
console.log(global);
} a(); //输出 '我是全局变量'
console.log(part) // part is not defined ;()
</script>
2.隐式声明:
不使用var,直接给标识符赋值,这样就隐式声明了一个全局变量。即使该变量是在function内部声明的,但当该function被执行后声明的变量也是全局变量。
<script>
global= '我是全局变量global';//全局变量
function a(){
b = '我是在函数内部声明的全局变量b';//也是全局变量
console.log(global);
}
a(); //输出 我是全局变量global
console.log(b);// 输出 我是在函数内部声明的全局变量b
</script>
3.使用window全局对象来声明
全局对象的属性对应也是全局变量,详细如下:
<script>
window.global = '给你来一拳';
console.log(global);//输出 给你来一拳
</script>
————————————————
跨文件的变量处理(面向前端)
首先,我们知道JavaScript是一种 Web 的编程语言。
它定义了网页的行为。
一个网页中可能会有很多JS文件。
那么这些文件中的变量是否作用于全局,即变量的跨文件调用问题。
JS是从上到下执行的,保证声明的在前,调用的在后就可以
JS允许重复声明,后覆盖前
下面是几个例子。
在HTML中利用< script >标签定义
定义的变量在引入的JS文件前即可。
<body>
<h1 id ="myA"></h1>
<h1 id ="myB"></h1>
<script>var myA=1;</script>
<script src='text1.js'></script>
</body>
//text1.js
document.getElementById("myA").innerText=myA;
myA=2;
document.getElementById("myB").innerText=myA;
结果显示:
在其他的JS文件中定义,通过< script >标签调用
JS文件中定义的全局变量,在其后面引入的JS文件中都生效。
<body>
<script src='text1.js'></script>
<script src='text2.js'></script>
</body>
//text1.js
var myA=2;
//text2.js
window.alert(myA);
显示结果:
补充:JS到JS跨文件的处理
不难发现,在面向前端时。可以通过< script >标签完成调用。
那在后台调用JS文件时(如通过控制台语句),不经过HTML文件的情况下,怎样实现跨JS文件调用。
这里,我们可以使用创建自己的外部JavaScript库的方式。
如在Node平台下,通过require()语句来引入;
隐式全局变量
我们都知道在JavaScript中,全局变量不一定要用var定义,但局部变量一定要用var定义。
所以默认不用var定义的变量就是全局变量。
但是有时候,不注意的代码书写方式可能会让我们犯一些错误。
譬如:
//text1.js
function myTest()
{
var myA=myB=1;
var myC=1,myD=1;
console.log(myA);
console.log(myB);
console.log(myC);
console.log(myD);
}
myTest();
console.log(myA);
//分别将console.log(myA);语句改为以下三条
//console.log(myB);
//console.log(myC);
//console.log(myD);
运行结果如下,其中函数运行的输出结果均为1。输出成功。
而console.log(myA)输出不成功,在于myA是局部变量
当将console.log(myA)改为而console.log(myB)后
值得注意的是,这里myB是一个隐式全局变量,可以成功输出1
console.log(myC)和console.log(myD)同console.log(myA)的输出结果一样,均不成功,即为局部变量。
其中,虽然myD前也无var定义,但因为前面的逗号表示和前一个的定义方式一样,所以这里它也是一个在函数内由var定义的局部变量。