有些人则称为“自执行的匿名函数”

在闭包中,我们经常需要使用到匿名函数,我感觉闭包就是一种匿名函数,子集。

但是直接在匿名函数后面调用函数是会出错的。比如:

function () {
alert("Hello IIFE");
}();
// Uncaught SyntaxError: Unexpected token (

我们期望系统立即调用这个匿名函数,但是系统会以为我们是在进行函数声明,进行函数声明需要有函数名称。而上面则没有,就会报错 在JavaScript高级程序设计第185页上讲,函数声明后面不能跟圆括号。

那么我们为它添加函数名咯,还会有一个小问题,如下:

 function f() {
alert("IIFE");
}();
// Uncaught SyntaxError: Expected () to start arrow function, but got ';' instead of '=>'
期望是立即调用一个具名函数表达式,结果是声明了函数 f。末尾的括号作为分组运算符,必须要提供表达式做为参数

那么我们应该如何创建一个自执行的匿名函数呢?我们可以让引擎理解()前面的是一个表达式而不是一个函数,写法如:

(function () {
alert("IIFE");
})();
//或者
(function () {
alert("IIFE");
}());

我们为匿名函数添加括号之后,被解析器解析为表达式,那么我们也可以这样使用:

 [ function () {}()];

 ~ function () {}();
! function () {}();
+ function () {}();
- function () {}(); new function () {};
new function () {}() ; var i = function () {}(); 0, function () {}();
true && function () {}();

大家有什么补充的话请留言哈,么么哒~~~

以上内容参考:

来源:阮一峰javascript:http://javascript.ruanyifeng.com/grammar/function.html#toc23

来源:知乎 长天之云 http://www.zhihu.com/question/20249179/answer/14487857

立即调用的函数表达式---IIFE的更多相关文章

  1. 立即调用的函数表达式IIFE

    1.写法 (function () { alert("IIFE");})();//或者(function () { alert("IIFE"); }());

  2. 理解JavaScript的立即调用函数表达式(IIFE)

    首先这是js的一种函数调用写法,叫立即执行函数表达式(IIFE,即immediately-invoked function expression).顾名思义IIFE可以让你的函数立即得到执行(废话). ...

  3. 关于立即调用的函数表达式(IIFE)

    在 JavaScript 中,圆括号 () 是一种运算符,跟在函数名之后,表示调用该函数.比如,print() 就表示调用 print 函数 有时,我们需要在定义函数之后,立即调用该函数,例如: fu ...

  4. 深入理解javascript系列(4):立即调用的函数表达式

    本文来自汤姆大叔 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法 ...

  5. [Effective JavaScript 笔记] 第13条:使用立即调用的函数表达式创建局部作用域

    function wrapElements(a){ var res=[],i,n; for(i=0,n=a.length;i<n;i++){ res[i]=function(){return a ...

  6. [JS]深入理解JavaScript系列(4):立即调用的函数表达式

    转自:汤姆大叔的博客 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.在详细了解这个之前,我们来谈了解一下"自执行"这个叫法 ...

  7. <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式

    前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.(小菜理解:的确看到好多,之前都不知道这是自执行匿名函数) 在详细了解这个之前,我们来谈了解一下 ...

  8. js 匿名函数-立即调用的函数表达式

    先提个问题, 单独写匿名函数为什么报错?return 匿名函数 为什么不报错? 如图: 第二种情况在 f 还没有执行的时候,就报错了,,,当然这得归因于函数声明语句声明提前(发生在代码执行之前)的原因 ...

  9. javascript立即调用的函数表达式N种写法(第二篇)

    原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...

随机推荐

  1. 每日英语:For Michael Dell, Saving His Deal Is Just First Step

    Michael Dell is set to win a bruising, yearlong battle for control of his company. His next task -- ...

  2. 每日英语:Hold On: Reasons For Never Giving Up Your Dream

    Do you remember what you wanted to be when you grew up? Maybe a fireman? A baker? A ballerina? You p ...

  3. vim 学习日志(6):分屏 sp,vsp,分屏移动

    Vim的分屏功能 本篇文章主要教你如何使用 Vim 分屏功能. 分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -o ...

  4. [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程

    看了opengles有一段时间了,算是了解了一下下.然后,就在基本要决定还是回归cocos2dx 3.2的,看了这篇好文章,欣喜转之~ 推荐看原帖: Cocos2d-x3.2与OpenGL渲染总结(一 ...

  5. css reset.css

    /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, ...

  6. 【转】二叉树、B树、B-树、B+树、B*树

    二叉树 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: 二叉树的搜索,从 ...

  7. Web攻防系列教程之文件上传攻防解析(转载)

    Web攻防系列教程之文件上传攻防解析: 文件上传是WEB应用很常见的一种功能,本身是一项正常的业务需求,不存在什么问题.但如果在上传时没有对文件进行正确处理,则很可能会发生安全问题.本文将对文件上传的 ...

  8. 由sqlite在手机上的存储位置,引发的onCreate在哪里执行的小结

    我们都知道,android为了操作数据库,一般是继承SQLiteOpenHelper类,并实现他的三个函数. 如下所示: package jz.his.db; import android.conte ...

  9. linux命令--vi,vim

    进入vi的命令  vi filename :打开或新建文件,并将光标置于第一行首  vi +n filename :打开文件.并将光标置于第n行首  vi + filename :打开文件.并将光标置 ...

  10. 【WPF/C#】使用BackgroundWorker实现多线程/异步操作

    做WPF时需要做一个异步加载时的Loading遮罩,搜Stackoverflow看到很多方法,看到了这个插件: BusyIndicator in the extended WPF Toolkit 同时 ...