zoukankan      html  css  js  c++  java
  • 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立即执行函数,存在的意义是什么?;

  • 相关阅读:
    分布式和集群
    c++ >>
    c++ ip地址相关
    c++ ip地址的操作 c版
    c++ 缺少动态库
    c++ dirname() basename()
    shell ulimit -n
    shell 进程查询相关的命令
    shell grep 高亮
    c++ swap 函数
  • 原文地址:https://www.cnblogs.com/ygming/p/8410835.html
Copyright © 2011-2022 走看看