首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript IIFE

IIFE 可以用于创建独立的作用域,避免变量污染和命名冲突,并且可以保护函数内的变量不被外部访问。IIFE的概念: IIFE是一个在定义后立即执行的匿名函数。...IIFE的语法: IIFE的语法包括两部分:函数表达式和调用括号。函数表达式可以是匿名函数或命名函数,但由于IIFE是立即执行的,通常使用匿名函数。...IIFE的作用:创建独立的作用域:IIFE在函数内部创建了一个独立的作用域,可以用于封装变量,避免变量污染和全局命名冲突。数据隐私:IIFE内部的变量和函数对外部是不可见的,从而保护了数据的隐私性。...模块化开发:IIFE可以用于实现模块化的开发,将相关的功能封装在独立的IIFE中,便于管理和维护。...IIFE的优点:避免全局污染:IIFE中定义的变量和函数都是在函数作用域内,不会污染全局命名空间,减少命名冲突的可能性。数据隐私:IIFE中的变量和函数对外部是不可见的,保护了数据的隐私性和安全性。

23830

来说一下JSIIFE函数是什么,什么是隐藏实现

写在前面 今天说一下什么是IIFE函数,为什么说这个,几个原因,一个是想总结一下,第二个是面试的时候确实会问到,考验功底的时候到了,所以这里还是作为一种记录的方式给大家说一下!...解释 IIFE 是Immediately Invoked function expression的缩写,意思就是立即执行函数表达式 隐藏实现:系统看不到我们的函数,但是我们却可以用它实现逻辑功能 举例子...js中有一个很有意思的点,在于如果你想声明一个函数,比如我们经常的做法如下: function _test() { console.log("我是一个js函数") } let _test...() 回到主题,IIFE函数其实就是一个自执行函数,代码如下: (function () { console.log("我是一个IIFE函数") })() 解释一下这里为什么要使用一个小括号将函数包裹起来...,原因很简单,被执行的函数需要是一个整体,就这么简单 优点1 看到这个经常写js的人会抬杠,我直接写console.log() 不行吗?

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript立即执行函数(IIFE)的使用

js的立即执行函数(IIFE)有两种写法,分别为:(function ( ){})( ) 与 (function ( ){}( )) ,这两种写法基本上是没有区别的。 那么为什么要 IIFE?...闭包和私人数据 IIFE的另一个用例是围绕由IIFE返回的函数访问的局部变量提供包装范围。通过这种方式,即使函数在IIFE的词法范围外执行,也会创建一个闭包,使函数能够访问局部变量。...在IIFE中,我们将跟踪每次调用计数器函数时递增的私有计数器变量。...但是在Node.js中,全局对象是global。...你肯定不想硬编码这两个名字其中的任何一个,这时你就可以使用一种”包装”的方式就像下面这样: (function(global) { // ... })(this); 不管是浏览器还是Node.js

2.2K20

JavaScript的IIFE(即时执行方法)

前面的话   严格来讲,IIFE并不是闭包,因为它并不满足函数成为闭包的三个条件。但一般地,人们认为IIFE就是闭包,毕竟闭包有多个定义。...来说,通过作用域链来查找变量与普通函数有一些不同的地方 【with】   with语句中的IIFE会先在with语句中查找,然后再向上查找。...一般用于构造私有变量,避免全局空间污染   接下来用一个需求实现来更直观地说明IIFE的用途。...) 写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏。.../ 最常用的两种写法 (function(){ /* code */ }()); // 老道推荐写法 (function(){ /* code */ })(); // 当然这种也可以   // 括号和JS

1.2K50

JS逆向百例】某音乐网分离式 webpack 非 IIFE 改写实战

-11ec-a637-0b779ce474e4 本次的逆向目标是搜索接口的一个参数 reqId,注意这个参数并不是必须的,本文的主要目的是介绍分离式 webpack,即模块加载器与各个模块不在同一个 JS...,GET 请求,Query String Parameters 里有个 reqId 加密参数,如下图所示: [01.png] 参数逆向 直接全局搜索 reqId,仅在 app.4eedc3a.js 文件里面有...c 是怎么来的,可以看到一下逻辑: var l = n(109) , c = n.n(l) var r = c()(); 埋下断点进行调试,可以看到 n 其实是 runtime.d5e801d.js...,也就是模块的格式,分为数组和字典两种,第二种是非 IIFE 方式,比较常规的改写方法,看起来也比较容易理解一点。...传字典 那么同样的 IIFE,我们将 109、202、203 这三个模块组成的字典传入 IIFE,键就依次取名为 109、202、203,值就是对应的函数,那么在调用对应的函数的时候就直接取键名就行了

1.1K30

IIFE 立即执行函数表达式

IIFE全称为Immediately Invoked Function Express-立即执行函数(表达式),顾名思义,是在定义之后立即执行的函数。...IIFE主要以保护变量范围著称,时候也会被称为“自执行的匿名函数”(self-executing anonymous function)。实际使用闭包定义在IIFE内部的变量外界是访问不到的。...当闭包跟IIFE结合的时候,会有以下两种优势:变量范围得到安全限制,能够避免被意外行为修改;你可以在函数外部修改函数内部的变量。这听起来破坏了第一种优势,实际上并没有。...你还有IIFE可以用,Immediately Invoked Function Expression-立即执行函数可以达到相同的目的。...你无法在外部访问IIFE内部定义的变量。

8710

立即执行函数表达式(IIFE

立即执行函数表达式(IIFE) 幸运的是,固定的语法错误很简单。最普遍接受的方式告诉解析器这是一个被括号包裹的函数表达式。...循环结束之后, // 尽管 `i` 的值是元素总数, 但是在 IIFE 中 // `lockedInIndex` 的值是函数表达式调用时传入的(`i`)的值 // 因此当点击链接时, 显示的值是正确的...你已经发现这一称呼被提到了多次,但也许并不清晰,我已经提议“立即执行函数表达式”这一术语,如果你喜欢缩写,也可以称呼“IIFE”。“iffy”的发音提醒了我,我很喜欢,让我们这样称呼它吧。...(function foo(){ /* code */ }()); // IIFE 也可以自执行, 尽管这并不是最 // 有用的方式。...我认为“IIFE”听上去比“IEFE”更好。 以上就是我的看法。

87750

JavaScript-立即调用函数表达式(IIFE

这种函数就叫做立即执行函数,全称为立即调用函数表达式IIFE(Imdiately Invoked Function Expression) 二、立即调用函数表达式 2.1 概念 立即调用函数表达式(IIFE...2.4 作用 (1)IIFE 中的匿名函数拥有 独立的词法作用域。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。(另一种说法 【构造一个函数作用域,防止污染全局变量】) ?...(3)【注意】将 IIFE 分配给一个变量,不是存储 IIFE 本身,而是存储 IIFE 执行后返回的结果。 ? 2.5 示例 接下来用一个需求实现来更直观地说明IIFE的用途。...【3】IIFE 其实这样做,还是有问题。有些代码可能会无意中将add.count重置 使用IIFE把计数器变量保存为私有变量更安全,同时也可以减少对全局空间的污染 ?...参考文章 深入理解JavaScript系列(4):立即调用的函数表达式 汤姆大叔 (译)详解javascript立即执行函数表达式(IIFE) 韩子迟 深入理解闭包系列第三篇——IIFE 小火柴的蓝色理想

1K20

关于立即调用的函数表达式(IIFE

上面两种写法都是以圆括号开头,引擎就会认为后面跟的是一个表示式,而不是函数定义语句,所以就避免了错误 这就叫做“立即调用的函数表达式”(Immediately-Invoked Function Expression),简称 IIFE...如果省略分号,遇到连着两个 IIFE,可能就会报错 // 报错 (function(){ /* code */ }()) (function(){ /* code */ }()) 上面代码的两行之间没有分号...() { /* code */ }(); -function () { /* code */ }(); +function () { /* code */ }(); 通常情况下,只对匿名函数使用 IIFE...它的目的有两个:一是不必为函数命名,避免了污染全局变量; 二是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。

52240

JS 模块化历史简介

随着 web 应用越来越复杂,共享全局作用域这种方式的弊端开始显现,于是 IIFE(立即调用函数表达式)就被发明了出来,并且广为使用。IIFE 就是将一整段代码包裹在一个函数中,然后立即执行这个函数。...下面让我们看几个 IIFE 的写法,每个 IIFE 的作用域都是独立的,其中第一种写法比较常见: (function() { console.log('IIFE using parenthesis'...('IIFE using the void operator') }() 使用 IIFE 这种方式,某个库如果想要暴露全局变量,可以在 window 上绑定一个对象作为命名空间,这样就避免了污染全局作用域...当然 IIFE 也有缺点,它并没有一个明确的依赖树,这使得开发者只能自己确保 JS 文件的加载顺序。...Node.js 和 CommonJS CommonJS 模块系统是 Node.js 中众多革新的一个,也叫 CJS。

2.2K20

前端模块化基石:commonJS原理浅析

/b.js') console.log(b.someData) 复制代码 // b文件 const someData = 'im b' module.exports = { someData } 复制代码...加载器 我们可以用fs.readFile或fs.readFileSync导入一个js文件,获取该文件内容的字符串。在node提供的require里第一步也是要获取内容字符串,但内部肯定要更复杂。.../b.js', 'utf-8') // 没有第二个参数,会得到一个buffer对象,我们要操作字符串,所以要传入字符编码 console.log(b) /** * const someData =...compile(){ const iife = this.getIIFE() const sandboxFunc = this.createSandbox(iife) ....../b.js', source)) // {someData:'im b'} 复制代码 结语 如果了解过ATS, 或者看过webpack的一些loader,plugin的源码,那这篇文章对你来说应该比较easy

51110

微生活时光机:去项目中挖掘JS模块化简史

I - IIFE 时代 典型技术:闭包,IIFE 代表项目:腾讯微生活门户网站(QQ美食)、微生活会员卡(x1) 1.1 - 模块化的萌发 早年间,JS 还只是 标签中的内联代码;或被封装到专门的脚本文件中调用...一个 IIFE 就是把整个或部分 JS 文件包裹进一个函数,并在对其求值后立即执行。...因为 JS 中的每个函数都会创建一个新一级的作用域,所以用 var 声明的变量就被绑定在所处的 IIFE 中了,这避免了定义全局变量时的脆弱性。 下面的代码片段展示了各种形式的 IIFE。...(function() { console.log('IIFE 1') })()(function() { console.log('IIFE 2') }())~function() {...console.log('IIFE 3') }()void function() { console.log('IIFE 4') }() 除非在 IIFE 中用 window.foo = 'bar

5851916

关于Rollup那些事

/maths.js'; console.log( cube( 5 ) ); 执行下面的命令后 $ rollup main.js --o bundle.js --f iife 输出bundle.js (...在构建的时候,加了个参数f,值为iife的选项,构建的后代码的组织形式被一个立即执行函数包裹。...代码构建后输出格式 上面在构建的时候指定了参数f,值为iife的选项,输出了立即执行风格的构建代码,rollup还支持下面几种输出格式: amd - AMD cjs -CommonJS es - ES6...UMD system - SystemJS loader 在构建代码的时候,可以根据代码运行环境选择不同的输出格式,如果你的代码是运行在node中那么cjs就可以,如果你的代码运行在浏览器环境中,那么iife...你的业务逻辑代码 Runtime - 代码执行的引导 Manifest - 模块依赖关系的记录 如果我们对main.js执行下面的命令构建后 webpack main.js dist.js 输出dist.js

63320

深入理解立即执行函数

实现私有变量 IIFE可以返回一个函数引用,当这个函数在IIFE的词法范围外执行,也会创建一个闭包,使函数能够访问局部变量。...在写通用js代码时,就可以利用IIFE将其包装起来,例如: (function(global) { // 其他代码 })(this); 包装之后,在IIFE内部使用global时在浏览器环境下其值就是...上述两种写法是等价的,要想立即执行函数做到立即执行,要注意两点: 函数体后面要有小括号 函数体必须是函数表达式而不能是函数声明 函数的声明方式 在讲它们两者之间的区别之前,我们先来了解下js函数的两种声明方式...如果将括号加在声明式函数后面如function test(){},运行之后会报错,因为不符合js的语法,想让其通过浏览器的语法检查,就必须添加符号,比如:()、+、!...匿名函数不能单独使用,否则会js语法报错,需要用()包起来,当我们需要给匿名函数传值时,写在其后面的括号即可,例如: (function(val) { console.log(val); }("我是匿名函数的参数

1.3K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券