匿名函数
1.作用链本质上是一共指向变量对象的指针列表,它只引用但不实际包含变量对象。
2.闭包(有权访问另一函数作用域中的变量的函数,常见的形式就是在一个函数的内部创建另一个函数)会携带包含它的函数的作用域,因此会比其他函数占用更多的内存,建议少用闭包。
3.闭包只能取得包含函数中的任何变量的最后一个值。个人觉得这一点刚好验证了第一点。正因为是引用,所以只会外部函数的变量对象中的最后的值。
4.闭包中的this指的是window,argument是[].要想访问作用域总的argument对象,必须将该对象的引用保存到另一个闭包能够访问的变量中。
5.闭包和匿名函数不是一个概念。
6.闭包中的this通常指的是windows,除非使用apply或call方法改变作用域
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <script type="text/javascript"> 2 var name = "the window"; 3 var obj = { 4 name : "my obj", 5 getNameFunc:function(){ 6 return function(){ 7 return this.name; 8 }; 9 } 10 } 11 alert(obj.getNameFunc().call(obj)); 12 </script>
当然可以在外部函数中将this变量保存在闭包能够访问到的变量,这样闭包就可以访问。
7.javascript可以多次声明同一个变量,后面的声明不起作用,除非改变了变量的值。
8.(function(){})()模仿块级作用域,即私有作用域。使用这种方法,可以限制向全局作用域中添加过多的函数和变量。
也可以减少闭包占用的内存,因为没有指向函数的引用,只要函数执行完毕