113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						||
<html lang="en">
 | 
						||
 | 
						||
<head>
 | 
						||
    <meta charset="UTF-8">
 | 
						||
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
						||
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
						||
    <title>Document</title>
 | 
						||
    <script>
 | 
						||
        // 目标 :从全局访问函数内部的变量
 | 
						||
        // 方法1
 | 
						||
        // function f1() {
 | 
						||
        //     var n = 999;
 | 
						||
        //     return {
 | 
						||
        //         n:n
 | 
						||
        //     }
 | 
						||
        // }
 | 
						||
 | 
						||
        // alert(f1().n)
 | 
						||
 | 
						||
        // 方法2:
 | 
						||
        // function f1() {
 | 
						||
        //     var n = 999;
 | 
						||
        //     function show(){
 | 
						||
        //         return n
 | 
						||
        //     }
 | 
						||
        //     show()
 | 
						||
        // }
 | 
						||
        // alert(f1())  //undefined   F1函数没有返回值
 | 
						||
        // alert(show()) // show is not defined  show()在函数f1的作用域中
 | 
						||
        // alert(f1())  //undeined  F1函数没有返回值
 | 
						||
 | 
						||
        // 作用域:
 | 
						||
        // 
 | 
						||
        // window
 | 
						||
        //     f1
 | 
						||
        //         n
 | 
						||
        //         show
 | 
						||
 | 
						||
        // function f1() {
 | 
						||
        //     var n = 999;
 | 
						||
        //     function show(){
 | 
						||
        //         return n
 | 
						||
        //     }
 | 
						||
        //     return show()
 | 
						||
        // }
 | 
						||
        // alert(f1())
 | 
						||
    
 | 
						||
        // 方法三
 | 
						||
        // function f1(){
 | 
						||
        //     var n=999;
 | 
						||
        //     function show(){
 | 
						||
        //         alert(n)
 | 
						||
        //     }
 | 
						||
        //     show()
 | 
						||
        // }
 | 
						||
 | 
						||
        // f1()
 | 
						||
 | 
						||
        function f1(){
 | 
						||
            var n=999;
 | 
						||
            function add(){
 | 
						||
                return n++
 | 
						||
            }
 | 
						||
            return add()  //函数返回值
 | 
						||
        }
 | 
						||
        console.log(f1())   //999
 | 
						||
        var res=f1()  //999
 | 
						||
        console.log(f1()) //999
 | 
						||
 | 
						||
        // GO: f1
 | 
						||
        // ao: n, add
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        function f1(){
 | 
						||
            var n=999;
 | 
						||
            function add(){
 | 
						||
                return n++
 | 
						||
            }
 | 
						||
            return add  //函数体
 | 
						||
        }
 | 
						||
        var res=f1() //通过return add 将add赋给res
 | 
						||
        // console.log(res)
 | 
						||
        // add 其实就是 全局访问f1中变量的一个桥
 | 
						||
        console.log(res())   //999
 | 
						||
        console.log(res())  //1000
 | 
						||
 | 
						||
 | 
						||
        // GO: f1,
 | 
						||
        //     res:add
 | 
						||
        // AO: n
 | 
						||
        //     add
 | 
						||
        
 | 
						||
    </script>
 | 
						||
</head>
 | 
						||
 | 
						||
<body>
 | 
						||
    <h3>作用域</h3>
 | 
						||
    <p>
 | 
						||
        函数内部的变量叫局部变量 只能再函数体内部访问 外部无法访问。 前提是 声明变量的方式是var
 | 
						||
        如果变量前面没有修饰,那么它就是 全局变量
 | 
						||
    </p>
 | 
						||
    <p>
 | 
						||
        闭包的形式上是父级函数返回的是子函数的函数体,从全局变量接收后就相当于把子函数塞给go,执行后不会被销毁
 | 
						||
    </p>
 | 
						||
    <p>
 | 
						||
        闭包的用处:一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
 | 
						||
    </p>
 | 
						||
</body>
 | 
						||
 | 
						||
</html> |