GGYS

博客园 首页 新随笔 联系 订阅 管理

今天学习这个js,在js中发现声明的变量使用的这个过程并不像在C#中如果使用变量一定要先声明的形式,在js中变量的声明在你方法中任何地方声明后,你在方法开始处就调用这个变量也可以,

可以看一下下面的代码

	var func = function() {
		var num = 10;
		var sub_func = function() {
            alert(num);
			var num = 20;
			alert(num);
		};
		sub_func();
	};
	func();

可以看到在这个方法中最后输出的结果是多少呢?

在第一个alert输出的结果是 undefined,而第二个alert输出的结果就是20,请问为什么?

因为在这个代码中 sub_func方法中的第一个alert在去调用num的时候去到了他所在的这个方法中寻找是否有这个名字的变量,如果在当前的方法域中找到这个变量就使用这个变量,如果没有就去到上一级的父级域中去搜索,如果搜索到就使用父级域的变量,那么可以看到我们sub_func这个方法中是有num这个变量的,其实这个代码的等效形式是这样的

	var func = function() {
		var num = 10;
		var sub_func = function() {
            var num;
            alert(num);
			num = 20;
			alert(num);
		};
		sub_func();
	};
	func();

可以看到,在这个sub_func方法中的 num其实是在方法的一开始就进行了声明,只是没有赋值而已,而到了下面num就进行了一个赋值操作而已,所以在js中声明变量一定要在最一开始就进行声明,否则就会出现第一个代码段的情况。js并不像在C#中那样,编译环境会提示告诉调用的变量有问题,因为代码是按照循序执行他并有在它上一级找到这个变量。

那么可以看一下下面这个代码它的输出值

	var func = function() {
		var num = 10;
		var sub_func = function() {
			var num = 20;
			alert(num);
		};
		sub_func();
	};
	func();

这一个的输出参数就是20,为什么,因为他在sub_func这个方法中找到了num这个变量,所以输出结果为20,那么如果这个sub_func方法中并没有num的话输出的就是父级域的num值了。

所以在js中方法的变量使用时一定要先声明,一定要声明在变量的开始位置。不然就可能会出现上述的情况。

posted on 2022-04-04 15:58  pengpeng077  阅读(7)  评论(0编辑  收藏  举报  来源