第一步:
区分:函数声明 / 函数表达式 / 匿名函数
函数声明: 格式: 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函数作用域链的特性,可以使用这种技术模拟私有作用域,用匿名函数作为"容器","容器"内可以访问外部的变量,而外部环境不能访问"容器"内的变量
参照原文:深入理解javascript中的立即执行函数(function(){…})()