JavaScript用var声明全局变量和局部变量

变量声明

变量的声明需要用到var关键字。

//声明一个名为a的变量
var a;  
//因为还没有对a进行初始化(初始化的意思就是第一次赋值),所以其值为undefined
//接下来对a进行初始化
a = 27;

变量的作用域

每一个变量都有一个作用域,也就是程序源代码中定义这个变量的区域。
全局变量拥有全局作用域,即在JavaScript代码的任何地方都是有定义的,又因为有定义所以是可以访问的。
在函数内声明的变量只在函数内以及该函数嵌套的任意函数内有定义,这种变量称为局部变量。形参也算是在函数内定义的。
实例:

var md = 27,year = 2001;//这里声明变量的同时进行了初始化

//可访问md和year
//不可访问a,b,sum,c,d

function add(a,b){
	var sum = 0;
	 //可访问md,year,a,b,sum
	 //不可访问c,d
	 sum = a * b;
	 
	functon addIn(c,d){
		//可访问md,year,a,b,sum,c,d
		return sum + c + d;
	}
}

变量提升

一般情况下,程序是从上至下按顺序执行。
无论是全局作用域还是函数作用域,变量的声明一定是全作用域的,而赋值是按顺序的。
这就是变量提升,在程序预编译时由编译器完成。
实例:

console.log(a);//undefined
var a = 27; 
cosole.log(a);//27

//等价于
var a;
console.log(a);
a = 27;
console.log(a);

JavaScript自动设置全局变量

正常情况下,变量的声明都会用到var关键字
当变量声明了才可以访问
当访问一个没有声明的变量会报错
但是给一个没有声明的变量赋值却不会报错
在这里插入图片描述
在这里插入图片描述
同样是全局变量,那么用var创建的全局变量和JavaScript自动创建的全局变量有什么区别呢?
首先我们要知道全局变量就是全局对象的一个属性,那么作为对象的属性是有一些特征的,比如是否只读、是否可枚举、是否可配置。用var声明的全局变量是不可配置的,而JavaScript自动创建的全局变量是可以配置的,并且前者不可用delete删除,后者可以。

var重复声明

对于一个变量可以用var重复声明。

var i = 12;
var i = 23;
console.log(i);//23
var i = 12;
var i;
console.log(i);//12,不是undefined

当局部变量和全局变量同名

当局部变量的变量名和全局变量的变量名一样时,那么在可访问区域访问时局部变量的优先级大于全局变量。
函数里面有嵌套函数也一样,从最近的地方开始访问,没有的话再往外找。

var a = 90;
function add(a,b){
    var a = 12;
    return b + a;
}
console.log(add(33,44));//56
//用var声明的a优先级还大于参数里面的a
var a = 12;
function fun(){
	var a = 33;
	function funin(){
		console.log(a);//33
	}
	funin();//调用
}
fun();//调用 

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值