JavaScript 立即执行函数

先理解一些函数的基本概念:函数声明、函数表达式、匿名函数。

函数声明:使用function关键字声明一个函数,再指定一个函数名。

function fnName(){}

函数表达式:使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量。
                     这是最常见的函数表达式语法形式。

var fnName = function(){}

匿名函数:使用function关键字声明一个函数,但未给函数命名。匿名函数属于函数表达式。

function(){}

函数声明和函数表达式不同之处在于:
         1、JavaScript引擎在解析JavaScript代码时会“函数声明提升”当前执行环境(作用域)上的函数声明,而函数表达式必须等到JavaScript引擎执行到它所在行时,才会从上而下一行一行的解析函数表达式
        2、函数表达式后面可以加括号立即调用该函数;函数声明不可以,只能以fnName()形式调用。

立即执行函数:创建一个匿名函数并执行,在一次执行后即释放(销毁)。

立即执行函数常见的两种方式:
1、一个匿名函数后面跟个小括号,然后整个包裹在一个括号运算符中:

(function(){}())

这也是W3C标准推荐的一种写法。

2、一个匿名函数包裹在一个括号运算符中,后面再跟个小括号:

(function(){})()

        除了使用()运算符之外,!, +, -, ~, = 等运算符都能起到立即执行的作用。这些运算符的作用就是将匿名函数或函数声明转换为函数表达式,消除了JavaScript引擎识别函数表达式和函数声明的歧义,告诉JavaScript引擎这是一个函数表达式,不是函数声明,可以在后面加括号,并立即执行函数的代码。如下面的函数都是立即执行函数:

(function(param){
    console.log(param);  //a
}('a'));

(function(param){
    console.log(param);  //b
})('b');

!function(param){
    console.log(param);  //c
}('c');

+function(param){
    console.log(param);  //d
}('d');

-function(param){
    console.log(param);  //e
}('e');

~function(param){
    console.log(param);  //f
}('f');

void function(param){
    console.log(param);  //g
}('g');

new function(param){
    console.log(param);  //h
}('h');

var fn = function(param){
    console.log(param);  //i
}('i');

注意:加括号是最安全的做法,因为 !, +, -, ~ 等运算符还会和函数的返回值进行运算,有时造成不必要的麻烦。

使用立即执行函数的好处:
        通过定义一个匿名函数,创建了一个新的函数作用域,相当于创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏污染全局的命名空间。此时若是想访问全局对象,将全局对象以参数形式传进去即可,如jQuery代码结构:

(function(window, undefined){
    //jquery code
})(window);

其中window即是全局对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值