1、闭包
是指一个函数或函数的引用,与一个引用环境绑定在一起。这个引用环境是一个存储该函数每个非局部变量的表,它不同于一般的函数,它允许一个函数在立即词法作用域外调用时,仍可访问非本地变量。
缺点: 容易造成空间浪费,内存泄漏,性能消耗
1 | // CASE 1 |
循环闭包:
1 | document.body.innerHTML = "<div id='div1'>aaa</div><div id='div2'>bbb</div><div id='div3'>ccc</div>" |
2、封装
1 | (function() { |
3、全局/函数/eval
1 | var a = 10; // 全局 |
解析: 由于没有块作用域,所以var item
相当于var a
是一个全局变量。b则是一个函数变量,只能在函数内有效,eval则在严格模式下外部是取不到eval作用域下的变量的。
5、作用域链
1 | function outer2() { |
6、作用域封装
1 | // 函数表达式 |
总结:这样的好处就是将变量作用域封装为函数内部作用域,防止跟全局变量发生冲突