匿名函数:就是没有名字的函数
function(){ //这里就是一个匿名函数,但是这个直接写会报错
alert("胖胖");
}
//可以把一个匿名函数赋值一个变量
var fin = function(){
alert("胖胖");
};
alert(fin);
fin(); //调用函数
//定义一个自调用函数
(function(){
alert("胖胖");
})();
//自调用函数 传参的方式
(function(userName){
alert(userName);
})("胖胖");
//返回值赋值一个变量
var userName = (function(){
return "胖胖";
})();
alert(userName);
//注意:这样写的小括号可以不要
var userName = function(){
return "胖胖";
}();
alert(userName);
闭包
闭包:闭包是指有权访问另一个函数作用域中的变量的函数
函数嵌套一个函数,并且函数内部的函数可以访问到外部函数的变量,
注意:变量会驻留在内存中,不会被回收;所以闭包少用
//一个简单的闭包
function show(){
var userName = "胖胖";
return function(){
return userName;
}
}
var fin = show();
alert(fin());
function show(){ //使用闭包实现累加
var num = 10;
return function(){
num++;
alert(num);
}
}
var fin = show();
fin();
fin();
fin();
//打印0 1 2 3
function show(){
var arr = [];
for(var i = 0; i < 4; i++){
arr[i] = (function(i){
return i; //i的返回是即时性的,返回i的值
})(i);
}
return arr;
}
var arr = show();
for(var i = 0; i < arr.length; i++){
alert( arr[i] );
}
//闭包中this问题
var obj = {
name : "胖胖",
age : 18,
sex : "男",
fin : function(){
alert(this.name); //这个this指的是obj
return function(){
alert(this); //[object Window] 这个this指的就是window
}
}
};
var show = obj.fin();
show();
//块级作用域;任何一对大括号的中的语句集都是一个块,这个块中的定义的变量是不可以见的,或者是不可以访问的
// javascript中没有块级作用域
function show(){
var str = "胖胖";
}
alert(str);
if(true){
var an = "胖胖";
}
alert(an); //这里也能访问 javascript中没有块级作用域
//可以仿块级作用域
(function(){
if(true){
var an = "胖胖";
}
})();
alert(an);//此时报错 访问不到an
//私有作用域问题
var an = "小红"; //A程序员定义的一个an变量;
var an = "胖胖"; //B程序员定义的一个an变量;
//变量冲突
(function(){ //存放A程序员代码
var an = "小红";
})();
(function(){ //存放B程序员代码
var an = "胖胖";
})()
回调函数
回调函数:就是调用函数的一个方式
定义:通过函数指针调用函数;
//first
function math(num1,num2){
return minus(num1,num2);
// return add(num1,num2);
}
function add(num1,num2){
return num1 + num2;
}
function minus(num1,num2){
return num1-num2;
}
alert(math(1,2));
//second
function math(num1,num2,fin){
return fin(num1,num2);
}
alert( math(1,2,add) );
alert( math(1,2,minus) );
function add(num1,num2){
return num1 + num2;
}
function minus(num1,num2){
return num1-num2;
}
//third
function math(num1,num2,fin){
return fin(num1,num2);
}
math(1,2,function(num1,num2){
return num1 + num2;
});
var num = math(1,2,function(num1,num2){
return num1 - num2;
});
alert(num);
//the last
var num = (function(num1,num2,fin){
return fin(num1,num2);
})(1,2,function(num1,num2){
return num1 - num2;
});
alert(num);
递归函数
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="keywords" content="">
<title>Examples</title>
<style type="text/css">
</style>
<script type="text/javascript">
//递归函数:在函数中调用自身
// function show(num){
// if(num > 1){
// num--;
// show(num);
// }
// alert(num);
// }
// show(3);
// function show(num){ //1*2*3*4*5
// if(num == 1){
// return num;
// }else{
// return num*show(--num); //5*show(--num); show(--5);
// }
// }
// // show(5);
// var num1 = show(5);
// alert(num1);
</script>
</head>
<body>
</body>
</html>