js、匿名函数、闭包、回调函数

匿名函数:就是没有名字的函数
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>

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值