转载自:JS立即执行函数
一个函数如果想要立即执行,那么就必须显示的将函数定义为表达式的形式。故可以通过如下的一些方式,定义一个立即执行函数:
(function(){}()); //最推荐的方式,外面的括号将内部的函数显示的定义为函数表达式
(function(){})(); //完全等同于以上的方式
!function(){}(); // 通过!元素符将函数显示的定义为表达式,然后执行,同理:+,- 也可以
var fn = function(){}(); //通过赋值运算符将函数显示的定义为表达式,然后执行
总之,实现函数立即执行的方式很多,但有的会与函数的返回值进行运行,如:!,+,-
;为了避免这种麻烦,我们通常采用1和2两种方式定义。
立即执行函数的作用:
- 解决闭包中的状态保存问题;(常见的一个函数内部返回多个函数,调用这些函数,打印父函数内部变量的问题)
- 模块化开发中,定义私有变量,防止污染全局;
- 初始化数据和页面
注意:函数表达式定义的函数,函数名外部无法引用如下:
var fn = function f(){};
console.log(typeof f); //打印undefined,函数表达式的函数名f在外部是访问不到的
if(function f(){}){
//同理,打印undefined,if语句中的函数解析为函数表达式,函数名f在外部是访问不到的
console.log(typeof f);
}