基础-函数3(IIFE立即执行函数)
参考链接:
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立即执行函数)的更多相关文章
- js中的匿名函数和匿名自执行函数
1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: <input type="button" value="点击" id ...
- js中函数表达式和自执行函数表达式的用法总结
立即调用函数表达式 给函数体加大括号,在有变量声明的情形下,没有任何区别 但是,如果只是[自动执行]的情形下,就会不同 因为,一个匿名函数,不赋值或函数体不加小括号,是不能自动执行的 //以下情形并无 ...
- IIFE 立即执行函数表达式-模块化
1)立即执行 2)表达式 3)括号,分号结束 | 前缀运算符 | 表达式上下文 4)只需要执行一次,内部变量无需维护,可用于初始化 (function( ) { })( ); 或 (function( ...
- jquery中ready函数,$(function(){})与自执行函数的区别
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- lua 根据函数名字符串来执行函数
function myfunction(msg) print("this is msg fun " .. msg); end local fun =_G["myfunct ...
- 立即执行函数(IIFE)的理解与运用
作为JavaScript的常用语法,立即执行函数IIFE(Immediately-Invoked Function Expression)是值得我们认真去学习探究的. 一.创建函数的两种方式 我们先从 ...
- 使用"立即执行函数"(Immediately-Invoked Function Expression,IIFE)
一.原始写法 模块就是实现特定功能的一组方法. 只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. function m1(){ //... } function m2(){ // ...
- (译)详解javascript立即执行函数表达式(IIFE)
写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏.本文虽然是译文,但是直译的 ...
- JS立即执行函数表达式(IIFE)
原文为 http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife ----------------- ...
随机推荐
- [LeetCode] Minimum Size Subarray Sum 解题思路
Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...
- 七个你必须重视的 Git 使用技巧
与其他技术相比,Git应该拯救了更多开发人员的饭碗.只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误. 尽管这么说,Git的命 ...
- macos 配置 golang 开发环境
初次接触golang这门编程语言,一下子就喜欢上了,语法简洁优雅,对于以前有c/c++编程经验的人来说会更加有亲切感. 仅仅学习了一天就能应用beego框架和mogodb数据库开发一个rest api ...
- asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0" 提供程序"
笔者在项目中做做了一个从Excel表格中导入数据的模块.大体上asp.net项目中导入Excel大体分成三类: 1)采用c#内置方案System.Data.OleDb(限制较小, 通用) 2)采用Ex ...
- 服装销售系统数据库课程设计(MVC)
<数据库课程设计> 名称:Jia服装销售网站 姓名:陈文哲 学号:…… 班级:11软件工程 指导老师:索剑 目录 目录 1 需求分析 3 一:销售部门机构情况 3 二:销售部门的业务活动情 ...
- hdu4488 Faulhaber’s Triangle(模拟题)
Faulhaber’s Triangle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决
adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决 在ubuntu14.04下,搭建Android开发环境,下载官方的adt- ...
- VSS的运用小内容(针对于vs2008版本)(小的问题都是,仅供参考--只针对于菜鸟级的)
自己开始接触vss 的时候有些小的习惯没有很好的养成,下面的有关VSS内容都是简单的迁入迁出的问题,(仅供参考) 1.文件的迁入迁出:(.txt..xlsx..doc) a:文件的覆盖问题: 对于文件 ...
- [每日一题] 11gOCP 1z0-052 :2013-08-31 数据库的存储结构....................................................A8
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/10784599 . 正确答案:A 将逻辑存储与物理存储分开是关系数据库范例的必要部分.关系数 ...
- LRU算法&&LeetCode解题报告
题目 Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...