| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
- <body>
- <script>
- // 全局作用域 :在函数外部定义的变量 可以在任何地方访问
- // 局部作用域 :在函数内部定义的变量 只能在函数内部访问
- // 块作用域 :在块级作用域内部定义的变量 只能在块级作用域内部访问 只要使用{ } 就是块级作用域 例如:for循环 、if语句
- // 使用var 只分为全局作用域和局部作用域(函数内定义与函数外定义 没有其他情况)
- // if(true){
- // var a = 10;
- // }
- // console.log(a);
- // function fun(){
- // // 函数内部定义的变量 只能在函数内部访问
- // var a = 10;
- // }
- // fun();
- // 函数外不能访问函数内部定义的变量
- // console.log(a);
- // 使用let、 const 定义的变量 可以生成块作用域
- // if(true){
- // let a = 10;
- // }
- // console.log(a);
- // es6之前使用闭包实现块级作用域
- // 闭包:函数嵌套函数 且内部函数可以访问外部函数的变量
- // 闭包的作用:1、保存变量不会释放 2、可以实现私有变量
- // var a = 10;
- // console.log(a);
- // 如果js发现这个变量后续没有被继续使用 则会自动释放(垃圾回收机制)
- // .....
- // function fun(username){
- // var a = [];
- // a.push(username);
- // console.log(a);
- // }
- // fun("张三");
- // fun("李四");
- // 以上函数的问题:每次调用函数 函数执行完毕 会将变量a释放 (因为局部作用域内没有再次使用a变量);
- // 解决方法:使用闭包
- function fun1(){
- var a = [];
- function fun2(username){
- a.push(username);
- console.log(a);
- }
- return fun2;
- }
- var fun3 = fun1();
- // console.log(fun3);
- fun3("张三");
- fun3("李四");
- </script>
- </body>
- </html>
|