参考链接:

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. SRM 447(1-250pt, 1-500pt)

    DIV1 250 水题...略. DIV1 500 抽象题意:有一个图,指定其中亮点p1和p2,删掉途中其他的一些点,使得p1和p2最短路大于3. 解法:使得p1和p2最短路为2的点一定要删掉.然后, ...

  2. 机器学习-review-1 线性回归

    发现隔一段时间,忘记了好多知识点,这里认为重要的知识点记录下来,作为笔记,方便以后回顾. From “李航- 统计学习方法” 统计学习方法的三要素: 模型,策略, 算法 对于线性回归 -------- ...

  3. 如何成为一名优秀的web前端工程师(前端攻城师)?

    程序设计之道无远弗届,御晨风而返.———— 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种:第一种一直在问:如何学习前端?第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优秀. ...

  4. hdoj 3072 Intelligence System【求scc&&缩点】【求连通所有scc的最小花费】

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. 一个好看的Input样式

    <div class="search"> <input type="text"></div> .search{ text-a ...

  6. SQL用replace替换文本部分内容

    替换文本内容 update tk_question set stem=replace(cast(stem as varchar(max)) ,'被替换文本','替换文本') 查询字段内容长度 sele ...

  7. MySQL自定义查询字段排序

    同事在做抽奖排名的时候有个问题 需要按照 一等奖 二等奖 三等奖 未中奖 的形式输出数据 问到我如何排序. 数据库设计如下 用一个prize_code字段标示了是否中奖 1是一等奖 2是二等奖 3是三 ...

  8. 关于list、set、map的几点总结

    用法: 1. 如果涉及到堆栈,队列等操作,应该考虑用List, 对于需要快速插入,删除元素,应该使用LinkedList, 如果需要快速随机访问元素,应该使用ArrayList.2. 如果程序在单线程 ...

  9. 关于PHP开发的9条建议

    这篇文章主要介绍了关于PHP开发的9条建议,都是个人的一些经验总结,有需要的小伙伴可以参考下. 本文只是个人从实际开发经验中总结的一些东西,并不是什么名言警句,写出来有两个目的:一是时刻提醒自己要按照 ...

  10. LCD深度剖析

    LCD 深度剖析 来源:http://blog.csdn.net/hardy_2009/article/details/6922900 http://blog.csdn.net/jaylondon/a ...