zoukankan      html  css  js  c++  java
  • IIFF(立即执行函数表达式)

    立即执行函数表达式(Immediately-invoked function expression,IIFF)

    在javascript(ES5)中,是没有块级作用域的概念的

    for (var i = 0; i < 5; i++) {
    }
    console.log(i);    //5
    

    因为没有块级作用域的概念,因此,在 for 循环中声明的 i 变量实际上是一个全局变量,因此可以在全局环境中访问的到。

    块级作用域,也可以称为私有作用域。也就是说只在for循环的语句块中有定义,一旦循环结束,变量 i 就会被销毁。而在ES5中,
    我们主要通过匿名函数的方式来块级作用域。

    用作块级作用域(私有作用域)的匿名函数的语法:

    (function() {
        //此处是块级(私有)作用域
    })()
    

    以上代码定义并立即调用了一个匿名函数。将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。

    //函数名没意义,所以使用匿名函数
    //第一个圆括号:将匿名函数转换为函数表达式。
    //第二个圆括号:立即执行匿名函数
    (function() {
        console.log(123);
    })()  
    

    //当然,你也可以给一个函数名,不过函数名在这里没有意义,因为整个函数在执行时就立即调用了。

    (function keith() {
        console.log(123);
    })()
    

    总结一下IIFE的优点:
    1.创建块级(私有)作用域,避免了向全局作用域中添加变量和函数,因此也避免了多人开发中全局变量和函数的命名冲突
    2.IIFE中定义的任何变量和函数,都会在执行结束时被销毁。这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数
    的引用。只要函数执行完毕,就可以立即销毁其作用域链了。

  • 相关阅读:
    扩展方法 之 Asp.Net篇【转】
    PowerDesiGner数据库设计
    DataFormatString格式化字符串的总结
    C#序列化对象为XMl于反序列化
    c# 反射初探【转】
    事件驱动的javascript 【转】
    每日一题力扣598
    每日一题力扣283
    每日一题力扣189数组的旋转 取模这个想法好棒!
    每日一题力扣119杨辉三角
  • 原文地址:https://www.cnblogs.com/fozero/p/6959803.html
Copyright © 2011-2022 走看看