一、为什么要用立即执行函数
1.我们不想用要全局变量
2.我们要使用局部变量
3.ES5里面,只有函数有局部变量(当然可以使用let)
4.于是我们声明一个函数function xxx,然后xxx.call()
5.这时候,xxx是全局变量(全局函数)
6.所以我们不能给这个函数名字
7.function(){}.call()
8.但是chrome报错,语法错误
9.可以这样来
-
!function(){}.call()
(我们不在乎这个匿名函数的返回值,所以加一个!也没啥事) -
(function(){}).call()
也是可以的,但是不推荐,防止手贱写成xxx(function(){}).call()
二、 立即执行函数
立即执行函数,使得内部的变量无法被访问,就可以利用闭包完成操作。
!function(){
var person = {
name: 'huazhen',
age: 18
}
window.addAge = function(){
return person.age += 1
}
}.call()
//另外这样访问
window.addAge()
这里,
1.立即执行函数使得person无法被外部访问
2.闭包使得匿名函数可以操作person
3.window.addAge保存了匿名函数的地址
4.任何地方都可以使用window.addAge
5.任何地方都可以使用window.addAge操作person,但是不能直接访问person
网友评论