JS函数

JS函数

函数的封装

传统方式

function 函数名(){}

该方式的函数有“预加载”过程,允许我们先调用函数、再声明函数

预加载:代码先把函数的声明放入内存。代码看起来是先调用、后声明,本质是先声明、后调用的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        getInfo();
        function getInfo() {
            console.log("hello");
        }

    </script>
</head>
<body>

</body>
</html>

函数先调用、后声明的条件是,全部代码在一个”<script>”标记里边。

如下所示:将会报错

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type="text/javascript">
        getInfo();
    </script>
    
    <script type="text/javascript">
        function getInfo() {
            console.log("hello");
        }

    </script>
  
</head>
<body>

</body>
</html>

变量赋值方式声明函数(匿名函数使用)

var 函数名 = function(){}

该方式没有“预加载”,必须先声明、后调用。

<script type="text/javascript">
        var getName=function () {
            console.log("hello");
        }
        getName();
</script>

函数的参数

实参和形参的对应关系

在javascript里边:实参与形参没有严格的对应关系

<script type="text/javascript">
        function f1(name,age,addr='beijing') {
            console.log("名字:"+name+" 年龄:"+age+" 地址:"+addr);
        }
        f1("csx",12);
        f1("csx",13,"shanghai");
        f1("csx");
        f1();
</script>`

关键字arguments

利用arguments可以在函数里边接收实参信息。

<script type="text/javascript">
        function f1() {
            var len=arguments.length;
            if(len==0){
                console.log("个人信息:");
            }else if(len==1){
                console.log("个人信息:"+" 名字:"+arguments[0]);
            }else if(len==2){
                console.log("个人信息:"+" 名字:"+arguments[0]+" 年龄:"+arguments[1]);
            }else if(len==3){
                console.log("个人信息:"+" 名字:"+arguments[0]+" 年龄:"+arguments[1]+" 地址:"+arguments[2]);
            }
        }
        f1();
        f1("csx");
        f1("csx",12);
        f1("csx",13,"shanghai");
    </script>

callee关键字

在函数内部使用:代表当前函数的引用

耦合一处代码的修改会导致其他代码也要发生改变。 在程序项目里边要开发低耦合度的代码。

<script type="text/javascript">
        //callee可以降低代码的耦合度
        function jiecheng(n) {
           if(n==1){
               return 1;
           }else{
               return n*arguments.callee(n-1);
           }
        }
        console.log(jiecheng(5));
        console.log(jiecheng(6));

        var jc=jiecheng; //把jiecheng函数的引用传递给变量jc一份,使得jc也可以当函数使用
        jiecheng=null;//把jiecheng函数给销毁,避免后面代码使用
        console.log(jc(7));
</script>

函数返回值

函数返回,使用return关键字返回信息

return可以返回全部的数据类型,return本身还可以结束函数的执行

return还可以返回一个对象,因为函数是对象,所有也可以返回函数

<script type="text/javascript">
        function f1() {
            var name="csx";
            var age=12;
            var addr="beijing";
            //内部嵌套函数
            function f2() {
                console.log("I am f2");
            }
            return f2;//把函数返回
        }
        var ff=f1();//f1执行完毕后的返回值被ff接受
        //一个对象(f1()的返回值)对另一个变量赋值,是引用传递
        ff();
</script>

f2和ff是两个不同的引用,但是都指向同一个函数体

函数调用

传统方式调用

函数名()

匿名函数自调用

(function(){})()

<script type="text/javascript">
        var f1=function () {
            console.log("f1f1f1");
        }
        var f1="tom";//同名的f1把上面的函数给覆盖/污染了
        f1();
        //匿名函数自调用,好处:本身不会被同名变量污染
        (function () {
            console.log("hello");
        })();
        (function () {
            console.log("地址是:"+addr)
        })("北京");
</script>

匿名函数自调用,好处:本身不会被同名变量污染

全局/局部变量

  • 全局变量

① 在函数外部声明的变量

② 函数内部不使用“var”声明的变量(函数调用之后起作用)

<script type="text/javascript">
        //全局变量:函数外部声明
        var name="csx";
        function f1() {
            console.log("name:"+name);
            name="ccc";
        }
        f1();
        console.log("name:"+name);
        function f2() {
            //全局变量:函数内部不使用"var"声明(函数调用后起作用)
            age=12;
            console.log("age:"+age);
        }
        f2();
        age=18;
        console.log("age:"+age);



</script>
  • 局部变量

在函数内部声明的变量,变量前边有”var“关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值