• 函数的特殊点


    今天主要总结了,之前遗漏的问题,函数的特色点
    函数名、函数体、函数加载问题
     
    1、打印函数名,等于打印了整个函数的代码
    2、打印执行函数,等于打印函数的返回值
            a)函数包含函数,先执行内部函数,在执行外部的
      //函数名,就等于函数体
        //执行函数,就等于函数体里面的代码+返回值
        //打印函数名,等于打印整个函数体
        console.log(fu);
    
        //打印函数执行函数,等于打印返回值
        console.log(fu());//函数中包含函数,先执行里面的函数,在执行外面的函数
        
        function fu(){
            var arr=[1,2,3]
        }
    4、js加载函数的时候,只加载函数名,不加载函数体,要想用内部成员,必须调用函数
     
    函数的定义方法
     
    1、第一种定义方法最强大,定义完毕后,在哪里调用都可以,无位置限制。
    2、后面俩种方法是有局限性的,(调用函数必须在定义函数之后)
    3、后俩种方法,直接变量名,就是函数执行名,直接在函数体下面调用
     
    自定义方法
    function fu1(){
                console.log("我是第一种定义方法")
            }

    匿名函数定义方法(函数声明时不起名,把函数赋值给一个变量的情况,成为匿名函数。)

    var fu2=function(){
                console.log("我是第二种定义方法")
            }
    new function 函数定

    var fu3=new Function("console.log('我是第三种定义方法')");
    变量作用域
     
    局部变量
    1、只有局部能够访问的变量
    2、函数内部用var定义的变量
    3、函数执行完毕后,局部变量被回收
     
    全局变量(成员变量)
    1、在哪里都可以访问的变量
    2、在函数内部,直接定义的变量不加var为全局变量,函数必须执行才可以使用   
    //函数只加载函数名,不加载函数体
        var num3=111; //全局变量
        function fu(){
            //局部变量
            var num1=222;
            //全局变量
         //所以函数体的全局变量必须执行以后才可以在外部访问的到
             num2=333;
        }
        fu();
       // console.log(num1);//报错
        console.log(num3);
        console.log(num2);

    隐式的全局变量

     function fu(){
            //b和c是隐式全局变量
            var a=b=c=1;
            //g和f是隐式的全局变量(分号相当于换行)
            var d=1;g=2;f=3;
            //w和e不是隐式的全局变量(逗号是用同一个变量,是局部变量)
            var q=4, w=5, e=6;
        } 
      预解析(js解析器在页面加载的时候)
    1、首先查看语法错误
    2、变量声明提升和函数整体提升
           a)变量声明提升的时候,只提升变量名,不提升变量值
           b)而function直接定义的方法是整体提升。
    3、变量声明提升在函数内部照样使用
    var aaa;
        console.log(aaa);//空,变量名提升,还没赋值
         aaa=111;
        fn();
        function fn(){
            //空 不注释的时候,变量名提升,var aaa
            //函数的就近原则,那个变量离得近就用那个
          console.log(aaa);
          var aaa=222; //用他自己的
        }

    案例题

    f2();//结果:9 9 报错 9 9 9
        console.log(cc);
        console.log(bb);
        console.log(aa);
        f2();//结果 前三个报错,999,因为函数执行之前还没定义变量
        function f2(){
            var a=b=c=9;
            console.log(aa);
            console.log(bb);
            console.log(cc);
        }
    //需求:封装一个函数,求斐波那契数列的n项
            function fu(num){
                var num1=1;
                var num2=1;
                for(var i=3; i<=num; i++){
                    var eype=num2;
                    num2=num2+num1;
                    num1=eype;
                }
                return num2;
            }
            console.log(fu(12))
     
  • 相关阅读:
    将execl转换成pdf文件
    exBSGS模板
    fhqtreap的学习笔记
    bzoj3196: Tyvj 1730 二逼平衡树
    bzoj2226[Spoj 5971] LCMSum
    bzoj2120: 数颜色
    bzoj3236: [Ahoi2013]作业
    bzoj3208: 花神的秒题计划Ⅰ
    bzoj4143: [AMPPZ2014]The Lawyer
    bzoj1968: [Ahoi2005]COMMON 约数研究
  • 原文地址:https://www.cnblogs.com/wdz1/p/7326881.html
Copyright © 2020-2023  润新知