参考链接:

http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife

http://segmentfault.com/a/1190000003985390

IIFE是在后面进入模块编程看到的,对于它长成那个样子,原来也是和闭包那块经常一块出在面试题里的,让人容易脸盲|||

本文用于初识庐山面目,欢迎各路大侠吐槽~

IIFE-immediately invoked function expression,立即执行函数

格式:( function(){...}() );

推理:

首先,通常先定义一个函数 function a(){}; 或者 var a = function(){}; ,函数的调用为 a();

那么,既然要立即执行,想想就是定义跟调用拼一块,把a()中的a替换成定义,即:

function a(){}();//语法错误类型1,因为这时最后面的那对括号,放在一个函数声明的后面,表明完全和前面的函数声明分开,这时括号是有限运算符的括号,作为运算符的括号里头需要放表达式,没有的话就报错;

function(){}();//语法错误类型2,当我们用圆括号是为了调用函数而出现在函数后面时,因为遇到function关键字,首先默认是把它识别为函数声明,除非我们告诉括号前面是函数表达式,既然我们也没告诉括号这是函数表达式,它识别为函数声明时发现声明少了名字,就先报错了;如果把名字补上,就同第一种情况报错;

var a = function(){}();//语法正确,这时,最后那对括号终于认为前面是表达式了

其中,涉及到javascript中语法解析器如何解读“()”,现在我只知道:(statement声明)是错的,(expression表达式)是对的;

总结一下:

1. 声明+() //括号充当优先运算符,和前者无干系,直接这么写是报错的

2. 函数表达式+() //函数调用成功

3.(函数定义) //默认将函数当作函数表达式去解析,而不是函数声明

所以,IIFE的写法就有了:

写法1. (function(){})(); //包裹函数的那对括号强制函数直接量即里头那个匿名函数执行,返回一个引用,类似于表达式里指向匿名函数的变量名,在跟最后那对括号一起调用,执行函数;

写法2. (function(){}()); //如果去掉最外层的括号,函数体后的那对括号就不高兴,导致上文的语法错误类型2产生,有了最外层括号充当强制运算符,解释器会把里面的函数当成表达式,再匹配旁边的括号立即执行;

IIFE的用途:

1. 模拟块作用域,模块模式

2. 用来锁定值,保存此时的状态

如保存闭包的状态,通常会有循环给元素绑定事件:

for(var i=...){

  function(index){//用来锁定每次循环时i的值

    //原本的循环里的绑定事件注册代码

  }(i);

}

Hum~~先回家,慢慢(ˇˍˇ) 想~

基础-函数3(IIFE立即执行函数)的更多相关文章

  1. js中的匿名函数和匿名自执行函数

    1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景:   <input type="button" value="点击" id ...

  2. js中函数表达式和自执行函数表达式的用法总结

    立即调用函数表达式 给函数体加大括号,在有变量声明的情形下,没有任何区别 但是,如果只是[自动执行]的情形下,就会不同 因为,一个匿名函数,不赋值或函数体不加小括号,是不能自动执行的 //以下情形并无 ...

  3. IIFE 立即执行函数表达式-模块化

    1)立即执行 2)表达式 3)括号,分号结束 | 前缀运算符 | 表达式上下文 4)只需要执行一次,内部变量无需维护,可用于初始化 (function( ) { })( ); 或 (function( ...

  4. jquery中ready函数,$(function(){})与自执行函数的区别

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. lua 根据函数名字符串来执行函数

    function myfunction(msg) print("this is msg fun " .. msg); end local fun =_G["myfunct ...

  6. 立即执行函数(IIFE)的理解与运用

    作为JavaScript的常用语法,立即执行函数IIFE(Immediately-Invoked Function Expression)是值得我们认真去学习探究的. 一.创建函数的两种方式 我们先从 ...

  7. 使用"立即执行函数"(Immediately-Invoked Function Expression,IIFE)

    一.原始写法 模块就是实现特定功能的一组方法. 只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. function m1(){ //... } function m2(){ // ...

  8. (译)详解javascript立即执行函数表达式(IIFE)

    写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏.本文虽然是译文,但是直译的 ...

  9. JS立即执行函数表达式(IIFE)

    原文为 http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife ----------------- ...

随机推荐

  1. [LeetCode] 73. Set Matrix Zeroes 解题思路

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow ...

  2. 337. House Robber III

    二刷吧..不知道为什么house robbery系列我找不到笔记,不过印象中做了好几次了. 不是很难,用的post-order做bottom-up的运算. 对于一个Node来说,有2种情况,一种是选( ...

  3. clas

  4. Js- 在一个JS文件中引用另一个JS文件

    在调用文件的顶部加入下例代码: document.write(”<script language=javascript src=’/js/import.js’></script> ...

  5. Linux无处不在

    Linux is Everywhere从政府.教育.商业和非盈利组织.科研机构几个方面展示了现在都有哪些地方用了Linux.

  6. 用C#实现通用守护进程

    1. 下载 源码下载:http://pan.baidu.com/s/1vqDA2 安装包下载:http://pan.baidu.com/s/1sjmEB0p 2. 安装注意事项 在配置档中配置你要守护 ...

  7. 再谈内存管理与ARC运行机制(一)

    内存管理 内存在Objective-C开发中是一种相对稀缺的资源,拿Iphone4为例,它的内存只有512mb,所以妥善的处理好所创造,所使用的每个对象与变量都将成为一个问题.在ARC出现以前,同大部 ...

  8. BTrace使用总结

    btracejvisualvmhotswap  一.背景        在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数 ...

  9. hibernate.hbm.xml配置文件内容说明

    下面是一个自动生成的配置文件: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PU ...

  10. Plain old data structure(POD)

    Plain old data structure, 缩写为POD, 是C++语言的标准中定义的一类数据结构,POD适用于需要明确的数据底层操作的系统中.POD通常被用在系统的边界处,即指不同系统之间只 ...