javaScript权威指南第六版摘要

本文深入探讨JavaScript中变量的作用域规则,包括局部变量如何遮盖全局变量、变量声明提前的特性及其对变量赋值的影响,以及使用var声明变量时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在函数内声明一个局部变量或者函数中带有的变量和全局变量重名,那么全局变量就被局部变量所遮盖。

2.在全局作用域编写代码可以不写var语句,但声明局部变量时则必须使用var语句。

a=6;
window.onload =function haha(){
	b = 9
	alert(a);//6
	alert(b);//9
}

3.JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。

window.onload = function haha(){
	for(var i=0;i<5;i++){
	
	}
	alert(i);//5
}

4.有意思的是,这意味着变量在声明之前甚至已经可用。JavaScript的这个特性被非正式地称为声明提前(hoisting),即JavaScript函数里声明的所有变量(但不涉及赋值)都被"提前"至函数的顶部
var a = 1;
window.onload = function haha(){
	alert(a);//undefined
	var a = 0;
	alert(a);//0
}
你可能会误以为函数中的第一行会输出1,因为代码还没有执行到var语句声明局部变量的地方。

其实不然,由于函数作用域的特性,局部变量在整个函数体始终是有定义的,也就是说,在函数体内局部变量遮盖了同名全局变量。

尽管如此,只有在程序执行到var语句的时候,局部变量才会被真正赋值。

因此,上述过程等价于:将函数内的变量声明"提前"到函数顶部,同时变量初始化留在原来的位置:

var a = 1;
window.onload = function haha(){
	var a ;
	alert(a);//undefined
	a = 0;
	alert(a);//0
}

5.当使用var声明一个变量时候,创建的这个属性是不可配置的,也就是说这个变量无法通过delete运算符删除。如果你没有使用严格模式并给一个未声明的变量赋值的话,JavaScript会自动创建一个全局变量。

window.onload = function test(){
	var test1 = 1;//用var声明变量
	test2 = 2;//这个变量会被当作是全局变量
	alert(delete test1);//false
	alert(delete test2);//true
}

JavaScript可以允许使用this关键字来引用全局对象,但没有方法可以引用局部变量中存放的对象。

window.onload = function test(){
	var test1 = 1;
	this.test1 = 3;//这句话只有在test1为全局变量的时候才有效
	alert(test1);//1
}


P72

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值