8

定义

立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,
这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行;
立即执行函数(immediate function)术语不是在ECMAScript标准中定义的,但它很短有助于描述和讨论模式;
这种模式有一些几部分组成:

  • 使用函数表达式定义一个函数(函数声明不能起作用)

  • 在结尾加上一对括号,让函数立即被执行

  • 将整个函数包裹在一对括号中(只有在你不将函数赋值给一个变量的时候才需要)

功能

  • 它可以帮你封装大量的工作而不会在背后遗留任何全局变量。

  • 你定义的所有变量都会成员立即执行函数的局部变量,所以你不用担心这些临时变量会污染全局空间

  • 可以使用这种技术可以模仿一个私有作用域,用匿名函数作为一个“容器”,“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量

  • 可以添加更多的加强模块,移除它们,单独测试它们,允许用户去禁用它们等等
    为什么要有js立即执行函数,存在的意义是什么

注意点

立即执行函数通常作为一个单独模块使用。一般没有问题,但是,建议在自己写的立即执行函数前加分号,这样可以有效地与前面代码进行隔离。否则,可能出现意想不到的错误。
js自执行函数前加个分号是什么意思?

写法

  1. 最前最后加括号

    (function(){alert(1);}());

    JSLINT推荐这种写法

  2. function外面加括号

     (function(){alert(1);})();

    目前很多比较好的js library 使用的都是第二种方式。
    比如: web 图形绘制的: git , draw2d ,....

  3. function前面加运算符,常见的是!与void

    !function(){alert(1);}(); 
    void function(){alert(2);}(); 

    在function前面加!、+、 -甚至是逗号等到都可以起到函数定义后立即执行的效果,而()、!、+、-、=等运算符,都将函数声明转换成函数表达式,消除了javascript引擎识别函数表达式和函数声明的歧义
    js中立即执行函数


已注销
958 声望58 粉丝