zoukankan      html  css  js  c++  java
  • 立即调用的函数表达式IIFE

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

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

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

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

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

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

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

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

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

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

     1 [ function () {}()];
     2 
     3 ~ function () {}();
     4 ! function () {}();
     5 + function () {}();
     6 - function () {}();
     7 
     8 new function () {};
     9 new function () {}() ;
    10 
    11 var i = function () {}();
    12 
    13 0, function () {}();
    14 true && function () {}();

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

    以上内容参考:

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

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

  • 相关阅读:
    复制构造函数与重载=操作符
    size_t
    模板
    理解函数对象的函数适配器
    抽象基类
    派生类的一些知识
    了解protected 以及公用、私有和受保护的继承
    第四章 分治策略 最大子数组问题
    第二章 归并排序 分治法
    第二章 插入排序
  • 原文地址:https://www.cnblogs.com/maczyt/p/4908624.html
Copyright © 2011-2022 走看看