JavaScript-作用域-预解析

<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>作用域-预解析</title>
</head>
<body>
	<h1>变量的查找就是就近原则,去寻找var定义的变量,当就近没有找到的时候,就去查找外层</h1>
	<script>

	/*
		var a=1;
		function fn1(){
			alert(a);
			var a=2;
		}
		fn1();
		alert(a);
	*/
	/*第一种  输出undefined 1

	 	预解析:
	 	var a
	 	alert(a)
	 	var a=2;

	  说明:
	  第一个alert(a),查找a的时候会先在函数内查找
	  由于预解析的作用,此时的a是undefined
	  因此不会查找外面的a
	*/


	/*
		var a=1;
		function fn1(){
			alert(a);
			a=2;
		}
		fn1();
		alert(a);
	*/
	/*第二种 输出1  2
	  说明:
	  第一个alert(a),就近找var声明的变量,没有找到。
	  这里只是修改了a的值为2。只不过alert(a)还没执行到
	*/

	

	/*
		var a=1;
		function fn1(a){
			alert(a);
			a=2;
		}
		fn1();
		alert(a);
	*/
	/*第三种  输出undefined 1*/
	


	/*
		var a=1;
		function fn1(a){
			alert(a);
			var a=2;
		}
		fn1();
		alert(a);
	*/
	/*第四种  输出undefined 1*/
	


	/*
		var a=1;
		function fn1(){
			alert(a);
			 a=2;
		}
		fn1(a);
		alert(a);
	*/
	/*第五种  输出1 2*/
	

	/*
		var a=1;
		function fn1(){
			alert(a);
			var a=2;
		}
		fn1(a);
		alert(a);
	*/
	/*第六种 输出undefined 1 */	
	

	/*
		var a=1;
		function fn1(a){
			alert(a);
			 a=2;
		}
		fn1(a);
		alert(a);
	*/
	/*第七种  输出1 1*/
	

	/*
		var a=1;
		function fn1(a){
			alert(a);
			var a=2;
		}
		fn1(a);
		alert(a);
	*/
	/*第八种 输出1 1 
	  说明:
	  第一个alert(a),当参数跟局部变量重名时
	  优先级是等同的
	*/
	
	

	</script>
</body>
</html>
原文地址:https://www.cnblogs.com/1666818961-lxj/p/7383965.html