回顾作用域、作用域链、预解析
·全局作用域
·函数作用域
·没有块级作用域
·内层作用域可以访问外层作用域,反之不行
什么是闭包
·一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。
<script> // 体会闭包 // 将一个内部函数拿到父函数的外面,观察是否还能调用父函数内部的变量 function outer() { var a = 10; function inner() { console.log(a); } // 将inner 函数作为返回值 return inner; } // 在outer函数的外面,是不能直接访问 a 变量 // outer(); // console.log(a); // 将 outer 执行的结果,赋值给一个变量 var inn = outer(); // console.log(inn); // 在全局调用 inn,按道理应该查找全局的 a变量 inn(); // 输出的真正结果是 10,来自于 outer 函数内部的变量 </script>