立即执行函数和闭包的使用


title: 立即执行函数和闭包的使用
date: 2018-10-11 20:34:17
tags: [JavaScript]
categories: JavaScript


立即执行函数的作用和使用

  1. 我们不想要全局变量
  2. 我们要使用局部变量
  3. ES 5 里面,只有函数有局部变量
  4. 于是我们声明一个 function xxx,然后 xxx.call()
  5. 这个时候 xxx 是全局变量(全局函数)
  6. 所以我们不能给这个函数名字
  7. function(){}.call()
  8. 但是这样写 Chrome 会报错,语法错误
  9. 试出来一种方法可以不报错:
!function(){}.call()  //我们不在乎这个匿名函数的返回值,所以加个 ! 取反没关系

(function(){}).call() //不推荐,原因如下

xxx    
(function(){}).call() //报错

allen12415145141556.call() //用随机数,不推荐

立即执行函数的好处

  1. 函数不必再另外命名,避免了污染全局,不会在复杂页面协作中造成错乱;

  2. 实现一个作用域隔离,封装外部无法读取的私有变量

  3. 避免命名冲突,符合js语法规则,并立刻执行。

结合闭包的使用

  1. 立即执行函数使得 变量person 无法被外部访问
  2. 闭包使得匿名函数可以操作 变量person
  3. window.GrowUp 保存了匿名函数的地址
  4. 任何地方都可以使用 window.GrowUp
    => 任何地方都可以使用 window.GrowUp 操作 person,但是不能直接访问 person
!function(){
    var person = xxx
    window.GrowUp(){
        xxxxx
    }
}.call()

你可能感兴趣的:(立即执行函数和闭包的使用)