写在前面

今天说一下什么是IIFE函数,为什么说这个,几个原因,一个是想总结一下,第二个是面试的时候确实会问到,考验功底的时候到了,所以这里还是作为一种记录的方式给大家说一下!

解释

  • IIFE 是Immediately Invoked function expression的缩写,意思就是立即执行函数表达式
  • 隐藏实现:系统看不到我们的函数,但是我们却可以用它实现逻辑功能

举例子

js中有一个很有意思的点,在于如果你想声明一个函数,比如我们经常的做法如下:

function _test() {console.log("我是一个js函数")
}
let _test = function() {console.log("我是一个js函数")
}

以上是我们写代码的时候经常用到的创建函数的方式,但是如果我们想执行他的时候,就需要进行函数的调用,比如

_test()

回到主题,IIFE函数其实就是一个自执行函数,代码如下:

(function () {console.log("我是一个IIFE函数")
})()

解释一下这里为什么要使用一个小括号将函数包裹起来,原因很简单,被执行的函数需要是一个整体,就这么简单

优点1

看到这个经常写js的人会抬杠,我直接写console.log() 不行吗?费那劲,是的,但是假设我想页面上只用一个变量进行完成业务逻辑该怎么做呢?可能这里不是很明白,说人话就是我不想定义全局变量,但是我又想自执行一个函数怎么办?

代码块1

let a = 1
console.log(a++)

代码块2

(function () {let a = 1console.log(a++)
})()

问题在于上面两块代码有什么区别?根本的区别在于代码块1会造成变量的全局污染,而代码块2不会,这是第一个优势

优点2

代码块3

 (function () {let a = 1function add() {console.log(a++)}function count() {console.log("我是一个不被暴露出去的函数")}//向外暴露一个全局函数window.$ = function () {return {add: add}}})()$().add()

代码块3 他的优点在哪?假设我不想让页面或者是用这个js的人使用我的count函数,那么我完全可以将count函数进行隐藏,这种写法在哪里出现的比较多,jQuery的源码里面,我们可以选择性的将我们需要提供出去的全局函数暴露出去,不希望暴露的可以自己隐藏起来,这是第二个优点!所以说理论上来说,直接写func add 和func count都是可以的,全局的完全没问题,问题就在于我们就不好控制隐藏的一些函数!功能还可以实现掉,这个术语叫做隐藏实现
注:$ 是一个函数, 执行后返回的是一个对象

来说一下JS中IIFE函数是什么,什么是隐藏实现相关推荐

  1. java js中 function函数报错_浅析JS中对函数function的理解(基础篇)

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  2. JS OOP -02 深入认识JS中的函数

    深入认识JS中的函数: 1.概述,认识函数对象 2.函数对象和其他内部对象的关系 3.将函数作为参数传递 4.传递给函数的隐含参数:arguments 5.函数的apply,call方法和length ...

  3. JS中Promise函数then的奥秘探究

    JS中Promise函数then的奥秘探究 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个 ...

  4. JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype

    一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...

  5. JS中的函数声明和函数表达式

    JS中的函数声明和函数表达式 1. 函数声明定义一个具有指定参数的函数 函数声明提升, 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用 hoist ...

  6. js中trim函数_30天中的30个Excel函数:03 – TRIM

    js中trim函数 Yesterday, in the 30XL30D challenge, we took a poke at the lazy brother-in-law function -- ...

  7. 谈谈JS中的函数劫持

    说到劫持,第一反应可能是什么不好的东西.函数劫持并不邪恶,关键是看使用的人.虽然这个概念在前端领域使用较少,但是在安全领域.自定义业务等场景下还是有一定的使用价值的.所以,这一篇文章将会和大家一起去了 ...

  8. Js中匿名函数的理解

    目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...

  9. 美丽的闭包,在js中实现函数重载

    引言 最近在js的学习中,看到了函数重载的问题,一开始,只看到了实现代码,看着代码冥思苦想了半个小时,总算是理清了其实现的原理,也为其实现的巧妙感到赞叹,也是在自己搞懂原理之后,去网络上搜索了下,才知 ...

最新文章

  1. Windows/Linux上使用fopen相关函数读取大文件
  2. 编写同时在PyTorch和Tensorflow上工作的代码
  3. Windows同时安装python3.0和python2.7
  4. Cartographer安装
  5. Scala 语言转义字符
  6. python flask热更新_python(flask)+apscheduler定时邮件重发两次的问题
  7. docker php composer 使用_「PHP编程」如何使用Docker制作自己的LNMP/LAMP镜像
  8. cas-client登录后报INVALID_PROXY_CALLBACK
  9. ELF应用程序二进制接口
  10. Unity大中华区总经理兼全球副总裁张俊波:5G的来临,游戏运行于云端变得可能
  11. android 无法添加依赖关系,Android无法添加aop库依赖
  12. Java生成开发帮助文档 IDEA
  13. 团队成立——Microhard
  14. SyncToy多电脑工作离线同步/备份方案
  15. 史上最牛老丈人,三个朝代全是自家人
  16. 清华大学计算机科学与技术系朱军教授:机器学习里的贝叶斯基本理论、模型和算法...
  17. HTML 动态背景
  18. LaTeX 多层列举 条目 编号
  19. HTML期末作业-我的大学生活
  20. 研究 | CT图像迭代重建算法研究进展

热门文章

  1. Codeforces Round #658 (Div. 1) A2. Prefix Flip (Hard Version)
  2. 标准员报考建筑八大员报考建筑标准员施工现场标准化管理的思路
  3. Office 2007 sp3 3in1 无法安装64位版本的 office ,因为在您的 PC 上找到了一下 32 位程序
  4. win10家庭版设置移动热点出现“我们无法设置移动热点”
  5. win11无法设置移动热点
  6. eCPRI payload 解析
  7. ubuntu 16.04与win7双系统安装图解
  8. 有趣的DIY项目:支奴干飞机的试制
  9. 计算机学院寝室文明风景线活动,弘扬寝室文化,建设文明寝室——数计学院开展寝室文化节活动!...
  10. QQ同时在线人数地图发布 沿海“大亮”