<script>
//普通函数
/*function box(){
return 'abc'
}
window.alert(box());*/
/*匿名函数:就是没有给名称的函数或者名称被隐藏的函数;
function(){
return 'abc';
}
单独使用会报错;就算能够运行,也不能够调用,因为没用函数名;
*/
/* //把匿名函数赋值给变量的做法
var box=function(){
return 'abc';
};//这是一个语句,所以结束会有一个分号;
window.alert(box);//打印出的是box的整个函数体;*/
/* 第一步:先构造一个匿名函数
//function(){
return 'abc';
}*/
/*
第二步:函数要执行的是'XXX()'的形式;所以下面执行函数:
function() {return 'abc';}();
放在一行上是为了好看;换行不影响;
然而,这样并不能执行,执行控制台会报错;正常执行函数"XXX()"的括号
前是一个表达式;而此处的括号前是一个函数:function(){return 'abc';} 说要执行这个还得进行第三步;
*/
/*
第三步:给括号前的表达式加上();
(function(){return 'abc';})();
形式:(匿名函数)();第一个括号装匿名函数;第二个括号执行;
这样就可以执行了;但是函数体return;看不到结果;可以写成
aler('abc'); 即(function(){alert('abc');})();
*/
/* 由于函数一般是return来做返回的;所以上面的代码可以改成如下:
把匿名函数自我执行之后的值传给一个变量;然后打印
var box = (function(){
return 'abc';
})();
alert(box);//abc
当然也可以直接利用alert打印匿名函数自我执行之后的值
alert((function(){
return'abc';
})());//abc
*/
/* 第四步:自我执行匿名函数的传参
(function(age){
alert(age);
})(100); //100
*/
/*闭包:函数里面放函数;
1、一个普通函数里面放一个匿名函数;
function box(){
return function(){
return 'abc';
}
}
alert(box);
//执行结果function box(){
return function(){
return 'abc';
}
}//
function box(){
return function(){
return 'abc';
}
}
alert(box());//
执行结果function(){
return 'abc';
}//
function box(){
return function(){
return 'abc';
}
}
alert(box()());//执行结果 abc
*/
/*另一种理解方法:借用第三方变量获得box函数的返回值 function(){return 'abc';}
function box(){
return function(){
return 'abc';
}
};
var b = box();
alert(b);
然后在利用b();去执行获得返回值;从而获得结果 abc
function box(){
return function(){
return 'abc';
}
};
var b = box();
alert(b());
*/
</script>