• Python web前端 07 函数及作用域


    Python web前端 07 函数及作用域

    一、函数

      1、有名函数和匿名函数

    #函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块
    #函数就是包裹在花括号里面的代码块,前面使用了关键字function
    
    #分为有名函数和匿名函数
    #有名函数:有名字的函数,函数名加括号执行/充当事件函数执行
    #匿名函数:没有名字的函数,匿名函数不能单独出现,一般充当事件函数
    
    oBox.onclinck=function(){..};
    oBox.onclinck=fn;#这两个是一样的,后面的函数就是fn

      2、函数定义和函数表达式

    #函数表达式 特点:可以在后面加括号立即执行
    
    fn();
    function fn{ console.log(1);}
    #函数定义可以在定义前加括号执行,也可以在定以后加括号执行
    
    fn();
    var fn=function(){console.log(2);}
    #通过var定义的函数,只能在后面运行
    
    #() + - ! ~ 可以将匿名函数变为函数表达式
    function(){alert(3);}#匿名函数
    +function(){alert(3);}();#前面加了+(() + - ! ~ )变为函数表达式,后面加上()便是调用
    (function(){alert(3);})();
    (function(){alert(3);}());#这两种加括号都可以

      3、实参形参

    #在使用函数时,加括号导致的函数执行时,可以传递参数(形参、实参、不定参)
    
    function fn(x){
        alert(x);
    }
    fn(8);#执行函数时可以传递实参【用已知的变量(形参)或者具体的数据(实参)】
    #形参:相当于函数局部的变量,命名规则和var相同,定义,无中生有
    
    
    #很多个参数的情况
    sum(4,9);
    function sum(q,w){
        alert(g+w);
    }#形参和实参一一对应
    
    #形参和实参数量不一样的情况
    #实参大于形参
    sum(4,9,3,5);
    function sum(q,w,e){
        alert(g+w+e);
    }#可以运行,最后面的实参没有用
    
    #形参大于实参
    sum(4,9);
    function sum(q,w,e){
        alert(g+w+e);
    }#出现NaN,传参的时候依次是q=3,w=9,e=undefined
    
    #可以给形参添加默认值
    sum(4,9);
    function sum(q,w){
        q=q||0;#设置默认值,q或者0
        w=w||0;
        alert(g+w);
    }

      4、不定参

    sum(1,2,3,4,5,6,7,8,9,10);
    function sum(){
        var x=0;
        for(var i = 0,len=arguments.length;i<len;i++){
            x+=arguments[i];#将每个参数相加
        }
        console.log(x);
    }

      5、返回值return

    function fn(){
        console.log(2);
        return fn;#返回fn函数
    }#每个函数默认返回undefined
    
    var a=fn;
    console.log(a);

    二、作用域

      1、解析顺序

    #1、(定义)先解析var function参数
    #    a、该步骤的var只定义变量,后面的=赋值不解析
    #    b、该步骤的函数只定义函数,函数的执行不解析
    #    c、重名的只留一个、var和函数重名 函数优先
    #2、(执行)在自上往下执行其他代码
    
    #作用域:
    #作用:读写    域:范围,区域
    #解析:自上而下   1、找var定义函数 参数 2、执行

      2、

    alert(a);
    var a=10;
    alert(a);
    
    #1、找
    var a=undefined==>a=10(将库里面的a替换为10)
    #2、执行
    alert(a)==>undefined
    a=10
    alert(a)==>10

      3、

    alert(a);
    function a(){
        alert(1);
    }
    alert(a);
    
    #1、找
    a=function a(){
            alert(1);
        }
    #2、执行
    alert(a);#弹出函数体
    #定义没调用,所以没关系
    alert(a);#弹出函数体

      4、

    alert(a);
    function a(){
        alert(4);
    }
    a();
    alert(a);
    
    #1、找
    a=function a(){
            alert(4);
        }
    #2、执行
    alert(a);#弹出函数体
    a();#函数调用是新的作用域,只要是作用域,解析就要分两步
        #1、找 :找不到
        #2、执行: alert(4);==>4
    alert(a);#弹出函数体

      5、

    alert(a);
    function a(){
        alert(2);
    }
    var a=520;
    alert(a);
    
    #1、找(函数优先)
    a=function a(){
            alert(2);
        }
    #2、执行
    alert(a);#弹出函数体
    a=520;
    alert(a);#弹出520

      6、

    var a=1;
    function fn(){
        alert(2);
        var a=3;
    }
    fn();
    alert(a);
    
    #1、找
    a=undefined==》1
    fn=function fn(){
            alert(2);
            var a=3;
        }
    #2、执行
    fn();#找 a=undefined
           #执行:alert(2);弹出 2
              #a=3
    alert(a);  #弹出1#上面的函数只会改变函数里面的a,外面的改变不了

      7、

    var a=1;
    function fn(){
        alert(2);
        a=3;
    }
    fn();
    alert(a);
    
    #
    a=undefined
    fn=function fn(){
            alert(2);
            a=3;
        }    
    #执行
    var a=1;#赋值a
    fn();#找:没找到
            #执行:alert(2); 弹出2
            #        a=3;会去父级作用域找,从里往外找,会将外面的全局变量a赋值为3
    alert(a);弹出3    

      8、

    var a=1;
    function fn(a){
        alert(2);
        a=3;
    }
    fn();
    alert(a);
    
    #
    a=undefined
    fn=function fn(a){
            alert(2);
            a=3;
        }
    #执行
    a=1
    fn();#找:a=undefined   原因是有形参的时候了会定义个a
            #执行 alert(a);弹出 2
            #a=3  #赋值3
    alert(a); #弹出1  里面的影响不了外面的

      9、

    var a=1;
    function fn(a){
        alert(2);
        a=3;
    }
    fn(a);
    alert(a);
    
    #
    a=undefined
    fn=function fn(a){
            alert(2);
            a=3;
        }
    #执行
    a=1;
    fn(a);#找a=undefined
            #执行    fn(1);(相当于var a=1)
            #alert(2);
            #a=3
    alert(a); #弹出1

       10、

    var a=function(){
        alert(1);
    }
    function a(){
        alert(2);
    }
    a();
    
    #
    a=function a(){
            alert(2);
        }
    #执行
    a=function(){
            alert(1);
        }
    a();#找 :无
            #执行alert(1); 弹出1

    三、数据类型

      number方法

    Number()  #参数中必须能被转换为数字,否则返回NaN
    
    parseInt(解析的参数)  #将参数转换位数字,只打印整数部分
    
    parseFloat()  #将参数转换位数字,不是数字就停,否则直到小数部分遇到不是数字就停
    
    Num.toFixed(n) # 四舍五入保留n位小数
    
    NaN(Not a Number) #不等于自己

      数学方法

    Math #数学方法
    Math.pow(16,2)   #16的2次方
    Math.round(5.5)   #四舍五入(整数)
    Math.ceil(0.2)    #向上取整
    Math.floor(0.9)  #向下取整
    Math.max()      #取参数中的最大值
    Math.min()       #取参数中的最小值
    Math.random()  #0-1之间的随机数
    Math.random()*m+n   #n-(m+n)之间的随机数
    Math.PI             #  π
    Math.abs()        #求绝对值
  • 相关阅读:
    Java 异常
    【转】Java 内部类总结
    【转】Java中的static关键字解析
    【转】事务及事务隔离级别
    【转】事务并发的问题
    【转】hibernate对象三种状态
    iOS指南针
    CoreLocation 定位
    swift 2.2 语法 (下)
    swift 2.2 语法 (中)
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8735386.html
Copyright © 2020-2023  润新知