一道简单的JS题目

有一道JS题目,代码如下:

		var loacl = "out";
		function test(){
			alert(loacl);
			var loacl = "inner";
		}
		test();

问题是alert会输出什么?

也许大多人第一眼看到那都会认为alert输出的是“out”,但是当把程序运行起来,发现输出的是“undefined”!很吃惊吗?为什么会输出“undefined”呢!

这道题目考察的JS的作用域的问题,

在JS中,没有块级作用域!

这句话是什么意思呢?意思就是在JS中,函数所声明的变量,无论在什么地方声明,在整个程序中它们都是有定义的!、

所以由于这个作用域的限制,输出的并不是“out”,局部变量在整个函数体内都是有定义的,而局部变量隐藏了同名的全局变量!虽然局部变量在整个函数体内都有定义,但是没有执行到var语句之前,局部变量并没有初始化,所以,test函数相当于下面这样:

		function test(){
			var loacl;
			alert(loacl);
			loacl = "inner";
		}
这道题目告诉我们,在JS中,把变量声明都集中在函数开头是个好的编程习惯,不然的话,可能会让你大吃一惊!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值