JS函数

Posted chen-sx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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“关键字。

以上是关于JS函数的主要内容,如果未能解决你的问题,请参考以下文章

js基础

js预编译和函数执行

JS之手写Promise

将异步函数放入 useEffect 后出现错误

Wordpress:将 php 数组放入 JS-Function

js数据放入缓存,需要再调用