基础-函数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] 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 ...
- 337. House Robber III
二刷吧..不知道为什么house robbery系列我找不到笔记,不过印象中做了好几次了. 不是很难,用的post-order做bottom-up的运算. 对于一个Node来说,有2种情况,一种是选( ...
- clas
- Js- 在一个JS文件中引用另一个JS文件
在调用文件的顶部加入下例代码: document.write(”<script language=javascript src=’/js/import.js’></script> ...
- Linux无处不在
Linux is Everywhere从政府.教育.商业和非盈利组织.科研机构几个方面展示了现在都有哪些地方用了Linux.
- 用C#实现通用守护进程
1. 下载 源码下载:http://pan.baidu.com/s/1vqDA2 安装包下载:http://pan.baidu.com/s/1sjmEB0p 2. 安装注意事项 在配置档中配置你要守护 ...
- 再谈内存管理与ARC运行机制(一)
内存管理 内存在Objective-C开发中是一种相对稀缺的资源,拿Iphone4为例,它的内存只有512mb,所以妥善的处理好所创造,所使用的每个对象与变量都将成为一个问题.在ARC出现以前,同大部 ...
- BTrace使用总结
btracejvisualvmhotswap 一.背景 在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数 ...
- hibernate.hbm.xml配置文件内容说明
下面是一个自动生成的配置文件: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PU ...
- Plain old data structure(POD)
Plain old data structure, 缩写为POD, 是C++语言的标准中定义的一类数据结构,POD适用于需要明确的数据底层操作的系统中.POD通常被用在系统的边界处,即指不同系统之间只 ...