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立即执行函数,存在的意义是什么?;

posted @ 2018-02-03 21:39  ygming  阅读(189)  评论(0编辑  收藏  举报