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