• 函数 function


    目录

    1.创建函数方法

     1.1有函数名称的叫具名函数

    1.2 匿名函数,没有函数名称 (无法调用 一般不用)

    1.3函数表达式的方式创建,把一个函数赋值给变量

        

    2.函数参数

    2.1  形参和实参

    2.2  arguments 参数

    3.函数的小知识

             3.1  函数的重复声明 后声明的函数覆盖前面声明的函数

            3.2 函数提升,function创建的函数在js编译的时候提升到代码顶部。(一般不使用)

    4.回调函数 (特殊参数) --重点

           4.1回调函数:把一个函数作为实参传递给另外一个函数

    5.return 返回值 函数

            5.1 return:把函数内部的值返回到函数外部  

            5.2 函数运行的结束标志,return后面的代码不会执行

    6、函数的属性和方法 

            6.1 返回函数的名称,查看原始名称

            6.2 length 返回函数参数的个数 

            6.3 toString()函数转为字符串

    7.函数全局变量和局部变量

           7.1 函数外部创建的就是全局变量,可以在JS文件的任意位置使用

           7.2 函数内部创建的变量就是局部变量,只能在函数内部使用

            7.3 可以用return把函数内部的变量返回到函数外部

            7.4 ( )小括号可以立即运行函数

            7.5 闭包:函数内部返回一个函数

            7.6 递归函数 :函数调用自身函数


    1.创建函数方法

     1.1有函数名称的叫具名函数

    function 函数名称(){  };
    调用函数:
    函数名();

    1. <script>
    2. function fnl( ){
    3. var a = 2;
    4. var b = 5;
    5. console.log(a * b);
    6. }
    7. //调用函数
    8. fnl();
    9. script>

    1.2 匿名函数,没有函数名称 (无法调用 一般不用)

    基本语法:(函数(){  })

    1. <script>
    2. //需要添加小括号
    3. (function() {
    4. 333;
    5. })
    6. script>

    1.3函数表达式的方式创建,把一个函数赋值给变量

    1. <script>
    2. //把函数的值赋值给f2
    3. var f2 = function() {
    4. console.log ("f2");
    5. }
    6. //调用f2函数
    7. f2();
    8. script>

    1.4 用Function(argument,....,body)构造函数创建函数。

    argument是函数的参数,body是函数的主体(函数代码区块)。一般用于将字符串转为JS 代码运行

    1. <script>
    2. //用function(argument,....,body)构造函数创建函数
    3. var f3 = new Function ("console.log('f3')");
    4. //输出f3
    5. console.log(f3); //输出
    6. //判断f3函数的类型
    7. console.log (typeof f3) //输出function
    8. // 读取f3 将字符串转为JS代码执行
    9. f3();
    10. script>

         上述代码输出的结果

        

    2.函数参数


    2.1  形参和实参

    函数的小括号里面创建的变量叫参数,也叫形参。形参的数量没有限制,多个参数用逗号分割。 形参默认值是undefined

    实参:调用给函数传的值 |
            基本语法:function 函数名称(形参1,形参2,形参3......){
                                                    console.log();
                                     }
                                   函数名称(实参1,实参2,实参3......)

    1. <script>
    2. function fnl(a,b,c){
    3. console.log (a + b + c);
    4. }
    5. //如果只上传两个实参值 则输出NAN 因为 10 + 20 + undefiend = NAN
    6. fnl(10,20);
    7. script>

    给形参设置默认值,则可以避免undefined / NaN出现

    2.2  arguments 参数

     arguments 的基本介绍:
            1.只能在函数内部被访问
            2.arguments是一个伪数组(有下标索引,可以存放多个值,但是他里面没有数组的方法)
            3.arguments 里面存的是函数的实际参数传递过来的值
            4.arguments和函数的形参是对应的,有一个值更改了,对应的也要更改

    arguments[ ] 函数参数的数组       Arguments 一个函数的参数和其他属性   
    Arguments
    .callee 当前正在运行的函数       Arguments.length 传递给函数的参数的个数 

    1. <script>
    2. function test(num1 ,num2 ){
    3. console.log(arguments); //输出伪数组
    4. console.log(arguments[1]); //可以像数组一样利用下标读取
    5. num1 = 100 ;
    6. console.log(num1);//100
    7. arguments[1] = 200;
    8. console.log(num2) ; //200
    9. arguments[2] = 300;
    10. console.log(arguments[2]); //300
    11. }
    12. test(10,20);
    13. script>

     上述代码输出的结果

    arguments 基本用法:

     如果函数中有实参但是没有形参
         1)则需要函数中arguments参数来获取实参的值(获取到的是一个伪数组)
         2)可以用数组的遍历读取函数中的值

    1. <script>
    2. //f3函数有实参但是没有形参
    3. function f3 (){
    4. console.log(arguments);//用函数自带的参数arguments 来获取函数实参
    5. }
    6. f3(1,2,"a");
    7. script>

    3.函数的小知识

             3.1  函数的重复声明 后声明的函数覆盖前面声明的函数

    1. <script>
    2. function fa (){
    3. console.log ("fa");
    4. }
    5. function fa (){
    6. console.log ("fa----reapt");
    7. }
    8. fa(); //输出 fa----reapt
    9. script>

            3.2 函数提升,function创建的函数在js编译的时候提升到代码顶部。(一般不使用

            1)由于有函数提升,所以在函数创建前面 调用函数 不会报错 (仅适用于function创建

    1. <script>
    2. //在函数创建前面读取
    3. fn1(); // 读取为 aaa
    4. //创建函数
    5. function fn1 ( ){
    6. console.log("aaa")
    7. }
    8. script>

          2) 如果函数名和变量名相同,函数会覆盖变量 

    1. <script>
    2. //创建函数
    3. function fn1 ( ){
    4. console.log("aaa")
    5. }
    6. //变量与函数重名
    7. var fn1 ;
    8. console.log(fn1); //输出函数fn1
    9. script>

    4.回调函数 (特殊参数) --重点

           4.1回调函数:把一个函数作为实参传递给另外一个函数

    1. <script>
    2. //创建一个函数 参数为函数callback
    3. function fn1(callback){
    4. callback(); //读取函数cellback ----> xxxxxx
    5. }
    6. //写法1:调用函数fn1 回传一个匿名函数
    7. // fn1(function(){console.log("xxxxxx")});
    8. /* ================================================= */
    9. //写法2:创建一个变量函数
    10. var fnx = function(){
    11. console.log("aaaaaaa");
    12. }
    13. //调用fn1 把fnx函数作为参数传递到fn1
    14. fn1(fnx);
    15. script>

    5.return 返回值 函数

            5.1 return:把函数内部的值返回到函数外部  

                   如果函数没有return关键词,默认返回函数外部的undefined  
                    返回值给调用函数的变量

    1. <script>
    2. function f4(){
    3. var a = 10;
    4. var b = 20;
    5. var c = a*b ;
    6. //执行函数 返回C
    7. return c ;
    8. }
    9. /*
    10. 没有 return 默认返回undefined
    11. var res =f4();
    12. console.log (res); //--> undefined
    13. */
    14. //给函数值定义一个变量res
    15. var res = f4();
    16. //f4()函数运行会把return后面的结果返回到函数外面
    17. //-----> (把C返回到函数外面,相当于f4()运行后就得到c,再把c赋值给res变量)
    18. console.log(res); // --> 200
    19. script>

            5.2 函数运行的结束标志,return后面的代码不会执行

    1. <script>
    2. function f4(){
    3. var a = 10;
    4. var b = 20;
    5. var c = a*b ;
    6. //执行函数 返回C
    7. return c ;
    8. console.log("aaaa"); //跟在return后面 代码不会执行
    9. }
    10. var res = f4( );
    11. console.log(res); // ---> 只输出200
    12. script>

    6、函数的属性和方法 

            6.1 返回函数的名称,查看原始名称

            6.2 length 返回函数参数的个数 

    1. <script>
    2. var f3 = function test(a,b,c){}
    3. console.log(f3.length); //3 函数参数的个数
    4. script>

            6.3 toString()函数转为字符串

    1. <script>
    2. var f3 = function test(a,b,c){}
    3. console.log(typeof f3.toString());
    4. script>

    7.函数全局变量和局部变量

           7.1 函数外部创建的就是全局变量,可以在JS文件的任意位置使用

           7.2 函数内部创建的变量就是局部变量,只能在函数内部使用

    1. <script>
    2. //全局变量
    3. var a = 100;
    4. //创建函数
    5. function fn1 (){
    6. console.log ("全局变量函数中输出 a:" + a); // a:100
    7. var x = 50 ;
    8. console.log ("局部变量函数中输出 x:" + x);//b:50
    9. }
    10. fn1();
    11. console.log("全局变量函数外部也可以输出 :" + a);//a:100
    12. console.log ("局部变量函数外输出会报错 x:" + x); //报错
    13. script>

      如果局部变量和全局变量重名,则局部变量优先于全局

    1. <script>
    2. //全局变量
    3. var x = 100;
    4. //创建函数
    5. function fn1 (){
    6. var x = 50 ;
    7. console.log ("输出局部变量 x:" + x); // 50
    8. }
    9. fn1();
    10. console.log ("输出全局变量x:" + x); // 100
    11. script>

    如果在函数中修改了全局变量值,则外部也会输出修改过后的值

    1. <script>
    2. //全局变量
    3. var x = 100;
    4. //创建函数
    5. function fn1 (){
    6. x = 50 ;
    7. console.log ("输出变量 x:" + x); // 50
    8. }
    9. fn1();
    10. console.log ("输出变量x:" + x); // 50
    11. script>

            7.3 可以用return把函数内部的变量返回到函数外部

    1. <script>
    2. //创建函数
    3. function fn1 (){
    4. x = 50 ;
    5. console.log ("输出变量 x:" + x); // 50
    6. return x ; //返回X的值到fn1
    7. }
    8. var test = fn1();
    9. console.log ("函数内部变量x:" + test); // 50
    10. script>

            7.4 ( )小括号可以立即运行函数

              立即运行一个匿名函数

            7.5 闭包:函数内部返回一个函数

            作用:把函数内部的变量持久放在内存中

    1. <script>
    2. //实现局部变量的累加
    3. function f7() {
    4. var a = 0;
    5. // return 返回一个函数
    6. return function(){
    7. a++;
    8. console.log(a);
    9. }
    10. }
    11. //调用f7函数拿到return返回的函数
    12. //f7a 等于f7函数返回的匿名函数
    13. var f7a = f7();
    14. //调用f7a函数相当于是执行f7返回的匿名函数
    15. f7a(); // 1 闭包作用 :函数内部的变量持久放在内存中
    16. f7a(); // 2
    17. f7a(); // 3
    18. script>

            7.6 递归函数 :函数调用自身函数

    1. <script>
    2. function f7() {
    3. var a = 0;
    4. console.log(a);
    5. f7() ;//函数内部调用自身
    6. }
    7. script>

             递归的三部曲:
                    1.创建一个函数,函数要写出需要的结果
                    2.递归函数必须要有一个结束递归的条件
                    3.递归函数是从最里层(最后一个函数,结束条件)开始计算 

                       

            案例:计算5! (1*2*3*4*5)

    思维分析图:
            

    1. <script>
    2. function countNum(num){
    3. //第二步 递归函数需要一个结束条件
    4. if (num === 1){
    5. return 1; //return 值谁调用返回给谁
    6. }
    7. //第一步 创建 需要输出的结果
    8. return num * countNum(num-1);
    9. }
    10. var res = countNum(5);
    11. console.log(res);
    12. script>

  • 相关阅读:
    【Leetcode】1320. Minimum Distance to Type a Word Using Two Fingers
    机器学习——K最近邻算法(KNN)
    网工内推 | 国企、上市公司,IA/IP认证即可,有年终、绩效
    完全透彻了解一个asp.net core MVC项目模板1
    把Eclipse创建的Web项目(非Maven)导入Idea
    检查了600+个代码库,竟有3%代码未能通过单元测试
    CentOS单机安装k8s并部署.NET 6程序 压测 记录
    C++极速掌握,只需这一篇就够了
    HTML制作一个汽车介绍网站【大学生网页制作期末作业】(汽车首页 1页 带psd)
    adb server version (19045) doesn‘t match this client (41); killing.的解决办法
  • 原文地址:https://blog.csdn.net/m0_60979337/article/details/128081318