深入理解js中的立即执行函数(function(){....})

第一步:

区分:函数声明 / 函数表达式 / 匿名函数
函数声明: 格式: function 函数名称(){....};
使用function关键字声明一个函数,并指定一个函数名称,叫做函数声明;
函数表达式: 格式: var 函数名称=function(){....};
使用function关键字声明一个函数,但未给函数命名,最后将函数赋予一个变量,叫做函数表达式;
匿名函数:格式:function(){...};
使用function关键字声明一个函数,但没有函数名称,也没赋予一个变量
函数声明和函数表达式的不同之处:
一.JavaScript引擎在解析JavaScript代码时会"函数声明提升"当前执行环境(作用域)上的函数声明,而函数表达式必须等到JavaScript引擎执行到它时,才会从上而下一行一行地解析函数表达式
二.函数表达式后面可以加括号立即调用该函数,函数声明只能以"函数名称 ()"的形式调用
//函数声明 aa(); function aa() { alert("1111"); } //输出1111//函数表达式: aa(); var aa=function() { alert("222222"); } //报错aa不是一个函数 //匿名函数 function() { alert("3333"); } //报错

第二步
理解原理:(函数表达式)(); 第一个括号里必须是函数表达式,第二个括号里传递参数;
第一种写法(匿名函数(也属于函数表达式)):
(function(a){ alert(a); })(123)

第二种写法(函数表达式):
(function(a){ alert(a); }(123))

总结:##
JavaScript中没有私有域的概念,所以根据JavaScript函数作用域链的特性,可以使用这种技术模拟私有作用域,用匿名函数作为"容器","容器"内可以访问外部的变量,而外部环境不能访问"容器"内的变量
【深入理解js中的立即执行函数(function(){....})】参照原文:深入理解javascript中的立即执行函数(function(){…})()

    推荐阅读