立即执行函数的作用和使用
- 我们不想要全局变量
- 我们要使用局部变量
- ES 5 里面,只有函数有局部变量
- 于是我们声明一个 function xxx,然后 xxx.call()
- 这个时候 xxx 是全局变量(全局函数)
- 所以我们不能给这个函数名字
- function(){}.call()
- 但是这样写 Chrome 会报错,语法错误
- 试出来一种方法可以不报错:
1 | !function(){}.call() //我们不在乎这个匿名函数的返回值,所以加个 ! 取反没关系 |
立即执行函数的好处
函数不必再另外命名,避免了污染全局,不会在复杂页面协作中造成错乱;
实现一个作用域隔离,封装外部无法读取的私有变量
避免命名冲突,符合js语法规则,并立刻执行。
结合闭包的使用
- 立即执行函数使得 变量person 无法被外部访问
- 闭包使得匿名函数可以操作 变量person
- window.GrowUp 保存了匿名函数的地址
- 任何地方都可以使用 window.GrowUp
=> 任何地方都可以使用 window.GrowUp 操作 person,但是不能直接访问 person
1 | !function(){ |