javascript全局变量和局部变量详解

一、使用var声明的是局部变量,但是在全局作用域中使用var则与不用var一样,声明的是全局变量。

a = 1;  //  全局变量
var a = 1;  //  全局变量

全局变量相当于window对象的属性,可以window.属性名的方式访问及修改。
二、在局部作用域中,使用var声明局部变量,不使用var则声明全局变量。

function fun() {
	var a = 1;
	}
fun();
console.log(a);   //  undefined 

三、对比
例1:

var a = 1;   //  全局变量
	function fun (){
		var a = 2;   //  局部变量,虽与全局变量同名,但这是在函数体内部声明的全新变量,与全局中的a无关
		console.log(a);  //  值为2
	}
	fun();
	console.log(a);   //  值为1,尽管函数内部的局部变量a为2,但其与全局变量的a不是同一个,且在函数执行完后就被销毁了,所以这里输出的a是全局变量

例2:

var a = 1;  //  全局变量
	function fun (){
		a = 2;   //  没有用var,所以这里直接引用了全局变量a并修改了它的值,没有声明新的局部变量
		console.log(a);  // 值为2
	}
	fun();
	console.log(a);  //  值为2,因为函数执行完毕后虽然空间被销毁,但函数却改变了全局变量a的值

例3:

var a = 1;
function fun() {
	console.log(a);   //  值为1,因为局部环境中没有变量a,因此沿着作用域链向上找到全局变量a,直接引用。因为作用域链本质上是一个指向变量对象的指针列表,只引用但不包含实际变量对象。
}

四、对象的属性与全局变量的关系
全局变量相当于window对象的属性,可以变量or属性的方式访问;而其他对象的属性则仅能以属性的形式存在(调用)。他们相互之间不会覆盖,因为本质上是两个变量。
例1:

a = 1;  //  声明一个全局变量,相当于window.a
var obj = new Object();   //  创建一个普通对象实例
obj.a = 2;   //  给对象添加一个属性a,与全局变量a同名
console.log(obj.a);   //   输出2,因为这2个a不是同一个,一个是全局变量a,一个是对象的属性a

例2:

function Foo() {
	getName = function () {   //  声明一个全局变量并赋值一个函数
	console.log(1);
	return this;
	}
}

Foo.getName = function () {    //  给Foo函数对象添加一个getName属性并赋值一个函数
	console.log(2);
}

Foo.prototype.getName = function () {
	console.log(3);
}

var getName () = function () {    //  声明一个全局变量并赋值一个函数
	console.log(4);
}

function getName () {   // 在全局作用域下声明一个函数
	console.log(5);
}

<!--开始调用函数-->
Foo.getName();   // 输出2,此时调用的getName不是全局变量getName里定义的函数,而是Foo函数对象的属性getName
getName();   //  输出4,此时调用的是全局变量getName里存的函数
Foo().getName();  //  输出1,此时调用了Foo函数使全局变量getName的值改变
getName();   //  //  输出1,同理,因为调用了Foo函数使全局变量getName的值改变
new Foo.getName();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值