变量作用域

<!DOCTYPE html>
<html>
<head>
	<title>变量作用域</title>
	<meta charset="utf-8">
</head>
<body>
	<script type="text/javascript">
		//1.js变量作用域,内部环境可以使用外部环境的变量和函数,但是外部外部环境不能引用任何内部的变量和函数。
		 var n=111;
     function f1(){
         console.log(n);
     }
     f1(); //111

		function f2(){
		 	var g=222;
		 }
		//2.函数没有调用时候,声明的变量还没有初始化
		// console.log(g);//Uncaught ReferenceError: g is not defined
		f2();
		//console.log(g); //error //函数外部无法读取函数内的局部变量。
		
		 //3.函数内部声明变量的时候一定要有var 否则的话就是就定义了全局变量
		 function f3(){
		 	h=333;
		 }
		 //console.log(h);//Uncaught ReferenceError: g is not defined
		 f3();
		 console.log(h);//333
		//阮一峰的理解 闭包就是能够读取其他函数内部变量的函数。
		//种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。那就是在函数的内部,再定义一个函数,然后返回此函数。
		function f4(){
      var p=999;
      function f5(){
       console.log(p); // 999
        }
				return f5;
      }
		alert(f4());//打印f5函数 function f5(){console.log(p); //999 }
		alert(f4);//打印整个f4 function f4(){var p=999;function f5(){console.log(p); // 999}return f5;}
		//alert(p);//Uncaught ReferenceError: p is not defined
		
		//一般我们这样调用
		// var result=f4();
		// result();
		//在上面的代码中,函数f5就被包括在函数f4内部,这时f4内部的所有局部变量,对f5都是可见的。但是反过来就不行,f5内部的局部变量,对f4就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 只要把f5作为返回值,就可以在f4外部使用了。
		//思考 闭包一定要返回函数
	</script>
</body>
</html>

阅读更多
个人分类: javascript
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭