来说一下JS中IIFE函数是什么,什么是隐藏实现
写在前面
今天说一下什么是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函数是什么,什么是隐藏实现相关推荐
- java js中 function函数报错_浅析JS中对函数function的理解(基础篇)
正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...
- JS OOP -02 深入认识JS中的函数
深入认识JS中的函数: 1.概述,认识函数对象 2.函数对象和其他内部对象的关系 3.将函数作为参数传递 4.传递给函数的隐含参数:arguments 5.函数的apply,call方法和length ...
- JS中Promise函数then的奥秘探究
JS中Promise函数then的奥秘探究 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个 ...
- JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype
一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...
- JS中的函数声明和函数表达式
JS中的函数声明和函数表达式 1. 函数声明定义一个具有指定参数的函数 函数声明提升, 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用 hoist ...
- 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 -- ...
- 谈谈JS中的函数劫持
说到劫持,第一反应可能是什么不好的东西.函数劫持并不邪恶,关键是看使用的人.虽然这个概念在前端领域使用较少,但是在安全领域.自定义业务等场景下还是有一定的使用价值的.所以,这一篇文章将会和大家一起去了 ...
- Js中匿名函数的理解
目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...
- 美丽的闭包,在js中实现函数重载
引言 最近在js的学习中,看到了函数重载的问题,一开始,只看到了实现代码,看着代码冥思苦想了半个小时,总算是理清了其实现的原理,也为其实现的巧妙感到赞叹,也是在自己搞懂原理之后,去网络上搜索了下,才知 ...
最新文章
- Windows/Linux上使用fopen相关函数读取大文件
- 编写同时在PyTorch和Tensorflow上工作的代码
- Windows同时安装python3.0和python2.7
- Cartographer安装
- Scala 语言转义字符
- python flask热更新_python(flask)+apscheduler定时邮件重发两次的问题
- docker php composer 使用_「PHP编程」如何使用Docker制作自己的LNMP/LAMP镜像
- cas-client登录后报INVALID_PROXY_CALLBACK
- ELF应用程序二进制接口
- Unity大中华区总经理兼全球副总裁张俊波:5G的来临,游戏运行于云端变得可能
- android 无法添加依赖关系,Android无法添加aop库依赖
- Java生成开发帮助文档 IDEA
- 团队成立——Microhard
- SyncToy多电脑工作离线同步/备份方案
- 史上最牛老丈人,三个朝代全是自家人
- 清华大学计算机科学与技术系朱军教授:机器学习里的贝叶斯基本理论、模型和算法...
- HTML 动态背景
- LaTeX 多层列举 条目 编号
- HTML期末作业-我的大学生活
- 研究 | CT图像迭代重建算法研究进展
热门文章
- Codeforces Round #658 (Div. 1) A2. Prefix Flip (Hard Version)
- 标准员报考建筑八大员报考建筑标准员施工现场标准化管理的思路
- Office 2007 sp3 3in1 无法安装64位版本的 office ,因为在您的 PC 上找到了一下 32 位程序
- win10家庭版设置移动热点出现“我们无法设置移动热点”
- win11无法设置移动热点
- eCPRI payload 解析
- ubuntu 16.04与win7双系统安装图解
- 有趣的DIY项目:支奴干飞机的试制
- 计算机学院寝室文明风景线活动,弘扬寝室文化,建设文明寝室——数计学院开展寝室文化节活动!...
- QQ同时在线人数地图发布 沿海“大亮”