JS系列第1章之IIFE

Posted ygming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS系列第1章之IIFE相关的知识,希望对你有一定的参考价值。

前言

之前在网上看了很多关于JS的知识,再加上自己之前看的一些经典书(包括《javascrtipt高级程序设计》、《你不知道的JS》、《javascript语言精粹》等),所以回顾总结一下遇到的一些JS经典问题和重难点。

一、函数声明和函数表达式

在介绍什么的IIFE之前,先区分一下 函数声明 和 函数表达式。
定义函数的方式有两种:函数声明 和 函数表达式。

1 函数声明(function declaration),即形如:

function funcName(){
? ?函数体......
}

函数声明的特点是:

  • 必须要有函数名,它不能匿名;
  • 函数声明提升
  • 不能在函数声明后面加()直接调用它;

2 函数表达式,最常见的语法形式是:

var funcName = function(){
? ?函数体......
}

函数表达式的特点是:

  • 可以匿名;
  • 没有声明提升,使用前必须先赋值
  • 可以在 函数表达式后面加()来 运行/调用函数

二、什么是IIFE

IIFE(Immediately-Invoked Function Expression),即 立即调用的函数表达式。它的创建过程是:

1 声明一个匿名函数;
2 马上调用这个匿名函数

典型的例子是:(function funcName(){....})()
它还有一个变形写法,更有利于代码压缩,即

!function(){...} ()

“!”的存在让整句话可以当一元运算表达式来看,这样“function(){}”就被看成了一个函数表达式,执行结果再作为“!”的operand

三、IIFE的作用

1 隔离作用域

IIFE最主要的作用,就是用来隔离作用域。
在ES6之前,JS只有函数作用域,而没有块级作用域。那么为了能够隔离作用域,就只能把代码用一个函数框起来了,然后用所谓立即执行函数的方式,来模拟局部作用域。
具体的例子见:
例1

2 惰性载入

用IIFE写惰性载入,因为函数被执行引擎以同步的方式立即执行了,所以当在之后的代码访问这个变量时,可以直接返回计算后的筛选结果。

四 Reference

??1 Javascript高级程序设计;
??2 什么是立即执行函数?有什么作用?;
??3 这段 JavaScript 代码是什么意思?;
??4 为什么要有js立即执行函数,存在的意义是什么?;














以上是关于JS系列第1章之IIFE的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句系列(众数中位数与百分比)[八百章之第十五章]

sql 语句系列(闰年)[八百章之第十九章]

sql 语句系列(列举非索引外键)[八百章之第九章]

sql 语句系列(行与列处理)[八百章之第一章]

sql 语句系列(null 值处理)[八百章之第二章]

sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]