看过jQuery源码的人应该知道,jQuery开篇用的就是立即执行函数。立即执行函数常用于第三方库,好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),开发者们想到的解决办法就是使用立即执行函数。

1.什么是立即执行函数(IIFE)

在了解立即执行函数之前先明确一下函数声明、函数表达式及匿名函数的形式,如下图:

接下来看立即执行函数的两种常见形式:( function(){…} )()和( function (){…} () ),一个是一个匿名函数包裹在一个括号运算符中,后面再跟一个小括号,另一个是一个匿名函数后面跟一个小括号,然后整个包裹在一个括号运算符中,这两种写法是等价的。要想立即执行函数能做到立即执行,要注意两点,一是函数体后面要有小括号(),二是函数体必须是函数表达式而不能是函数声明。先看下图:

从图中可以看出,除了使用()运算符之外,!,+,-,=等运算符都能起到立即执行的作用。这些运算符的作用就是将匿名函数或函数声明转换为函数表达式,如下图所示,函数体是函数声明的形式,使用运算符将其转换为函数表达式之后就可达到立即执行效果:

2.使用立即执行函数的好处

通过定义一个匿名函数,创建了一个新的函数作用域,相当于创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏污染全局的命名空间。此时若是想访问全局对象,将全局对象以参数形式传进去即可,如jQuery代码结构:

其中window即是全局对象。作用域隔离非常重要,是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。

最新文章

  1. 深入理解JavaScript——闭包
  2. JavaWeb技术(三):JDBC中核心接口
  3. [转载]Python-第三方库requests详解
  4. 操作ACCESS数据库注意事项
  5. Firefox 火狐网址生成二维码扩展推荐
  6. 【转载】Apache Kafka监控之Kafka Web Console
  7. Android 将文件保存到SD卡中
  8. Linux编程---线程
  9. c++ string类型转换为char *类型
  10. BIN和HEX文件的区别
  11. K-Modes算法[聚类算法]
  12. 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯
  13. C#实现短链接生成服务
  14. 10进制 VS 2进制
  15. 学习笔记TF050:TensorFlow源代码解析
  16. Nginx-rtmp 直播媒体实时流实现
  17. tcpcopy真实流量压测工具
  18. volley的post请求
  19. C++之友元函数和友元类
  20. WebService连接postgresql( 失败尝试)

热门文章

  1. Protobuf C#
  2. win7 32位用pyinstaller打包Python和相关html文件 成exe
  3. css样式大全(整理版)
  4. zfighting 的问题
  5. Solr Cloud的搭建使用
  6. Linux装mysqli.so
  7. linux虚拟机上挂载U盘
  8. 关于顺序磁盘IO比内存随机IO快的讨论
  9. 【转载】【selenium+Python WebDriver】之元素定位
  10. 深入Asyncio(四)Coroutines