JavaScript 全局变量与局部变量的关系及声明方式

对于 JavaScript 中的全局变量和局部变量,分为隐式声明和显示声明。

全局变量
1.使用 var 关键字在函数外部声明的变量,为全局变量(显示声明)
2.在函数内部,没有使用 var 声明的变量,也为全局变量(隐式声明)
3.使用 window 全局对象来声明的变量,也为全局变量 `window.a = 1;`(显示声明)
局部变量
1.在函数内部使用 var 关键字声明的变量,为局部变量(显示声明)
2.函数的参数列表中的形参,为局部变量(隐式声明)

全局变量与局部变量的关系
在函数内部可以访问全局变量,在函数外部不可以访问局部变量

下面写一些实例来熟悉一下全局变量和局部变量的应用:

  • 实例1:
var a = 123;
function fun(){
	console.log(a);
}
fun();

运行结果:123
解释:

    实例1中,a 在全局作用域下使用 var 关键字声明了,是全局变量,而当我们 fun() 执行函数时,fun 函数内部的打印语句就会访问到全局变量 a ,所以,打印出来 123

  • 实例2
var a = 123;
function fun(){
	console.log(a);
	var a = 456;
}
fun();
console.log(a);

运行结果:undefined 123
解释:

    首先,我们可以知道,全局变量 a 的值是 123 ,而函数 fun 内部的局部变量 a 的值为 456 ,但是这里我们要注意,函数内部的 console.log(a); 是写在给 var a = 456; 之前的。由于变量声明提升,我们此时在函数内部的顶部相当于先 var a; 声明了 a ,但是赋值语句是不会提升的(有疑惑的可以看我的主页的函数声明与变量声明提前),所以把没有赋值的 a 给打印出来了,由于没有赋值,为 undefined
    有些读者可能会说,怎么不能使用全局变量 a=123; 呢,那是因为,在函数内部,如果声明了同名的变量,则会使用函数内部的局部变量,而不会访问全局变量,所以只能是访问函数本身的变量 a ,而 aconsole.log(a);之前没有赋值,所以是 undefined
    后面一个 console.log(a); 更简单,由于在函数外部是访问不到局部变量的,所以访问全局变量 a ,打印出来 123

  • 实例3
var a = 123; 
function fun(){
	console.log(a);
	a = 456;
}
fun();
console.log(a);

运行结果:123 456
解释:

    首先,明确一点,在函数内部没有使用 var 关键字声明的变量,会隐式的声明为全局变量,所以函数内部的 a 为全局变量,由于 console.log(a);a=456; 之前,所以 console.log(a); 访问全局变量中的 a 时,a 的值为 123 ,所以先打印出 123
    而后的 console.log(a); 被后面的全局变量 a=456 重新赋值了,所以打印出来 456

  • 实例4
var a = 123;
function fun(a){
	console.log(a);
	a = 456;
}
fun(123);
console.log(a);

运行结果:123 123
解释:

    首先,我们可以看到,函数 fun 是传了一个参数 a 的,所以按照前面的定义,这里的 a 会被隐式的声明为局部变量,所以第一个 console.log(a); 打印的是传入的实参,即 123
    而第二个 console.log(a); 只是打印全局变量 a 的值,为 123

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King_960725

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值