• 函数


    函数

    一、概念和定义

    1.定义:函数就是具有一定功能的可以重复执行的代码块。 函数不调用不执行。

    2.执行方法是:函数名+();
    fn();

    3.定义方法

    function fn(){
    console.log(1);
    }

    4.函数的组成分为:      1.参数。    2.返回值。    3.功能。

          设置参数解决问题。(修改值,不修改规则的问题)

          如果函数名相同,后面的函数会覆盖前面的函数。(函数名,不能一样)

          什么是返回值:执行完毕函数以后,我们能给其他变量赋值。外部要用哪个值,我们就返回哪个值。
          返回值的作用:一般来讲,函数通过运算出来的数都是一个半成品,需要二次加工

         如果我们想把函数内部的值赋值为外部,必须使用return;
         如果没有return或者只有return没有值,那么返回值都是undefined。

         函数的返回值必须要执行函数才能得到。

         return可以切断函数。 break跳出这个循环。  continue跳出本次循环进入下一循环。

    //    求阶乘
    //    console.log(getJC(10));
    //
    //    function getJC(num){
    //        var sumJC = 1;
    //        for(var i=1;i<=num;i++){
    //            sumJC *= i;
    //        }
    //        return sumJC;
    //    }
    
    //    求1!+2!+3!+....+n!(函数嵌套)
        //求阶乘的和
    
    //    console.log(getSumJC(4));
    //
    //    function getSumJC(number){
    //        var sum = 0;
    //        for(var i=1;i<=number;i++){
    //            sum += getJC(i);//求阶乘
    //        }
    //        return sum;
    //    }
    
    
    //    判断一个数是否是素数(质数)
        //思路:除了自身和1以外,不能被其他数整除。
        //注意点:
        //1.必须用for循环实现
        //2.判断是否是素数,所以她的返回值应该是true或者false。
        //3.如果num%i===0了,那么一定不是素数。只有出了1和自身以外所有的数都不能整除,那么才能说她是素数。
    
        console.log(isPrime(3));
    
    //    function isPrime(num){
    //        //除了自身和1以外,不能被其他数整除。
    //        for(var i=2;i<num;i++){
    //            if(num%i===0){
    //                return false;
    //            }
    //        }
    //        return true;
    //    }
    
        //拓展1(了解)
    //    function isPrime(num){
    //        //开闭原则
    //        var bool = true;
    //        //除了自身和1以外,不能被其他数整除。
    //        for(var i=2;i<num;i++){
    //            if(num%i===0){
    //                bool = false;
    //            }
    //        }
    //        return bool;
    //    }
    
        //拓展2
        function isPrime(num){
            //除了自身和1以外,不能被其他数整除。
            for(var i=2;i<=num/2;i++){
                if(num%i===0){
                    return false;
                }
            }
            return true;
        }
    
        //拓展3
    //    function isPrime(num){
    //        //除了自身和1以外,不能被其他数整除。
    //        //判断一个数是不是指数,只需要判断到他的平方根,超过平方根在判断,无意义。
    //        //因为一个数是由两个数相称得到的,一个变大,另外一个必然变小,那么判断到这个数的平方根就已经是极限了,不必超过平方根
    //        for(var i=2;i<=Math.sqrt(num);i++){
    //            if(num%i===0){
    //                return false;
    //            }
    //        }
    //        return true;
    //    }
    View Code
    //(参数和返回值)
        //求圆的周长(long=2*pi*r)
    //    var long1 = getLong(0.5);
    //    console.log(long1);
    //    console.log(getLong(1));
    //    function getLong(r){
            //通俗版
    //        var pi = 3.141592653;
    //        var l = 2*pi*r;
    //        return l;
    //    }
    
        //求圆的和面积(area = pi*r*r)
    //    var area1 = getArea(1);
    //    console.log(area1);
    //    function getArea(r){
    //        //通俗版
    ////        var pi = 3.14;
    ////        var a = pi*r*r;
    ////        return a;
    //        //精简版
    ////        var pi = Math.PI;
    ////        var a = pi*Math.pow(r,2);
    ////        return a;
    //        //最终版
    //        return Math.PI*Math.pow(r,2);
    //    }
    
        //求2个数中的最大值
    
    //    console.log(getMax(1,2));
    //    function getMax(num1,num2){
    ////        if(num1>num2){
    ////            return num1;
    ////        }else{
    ////            return num2;
    ////        }
    //        //return是可以切断函数的。
    ////        if(num1>num2){
    ////            return num1;
    ////        }
    ////        return num2;
    //        //三元运算
    //        return num1>num2?num1:num2;
    //    }
    
        //求3个数中的最大值
    //    console.log(getMaxThree(-1,0,3));
    //    function getMaxThree(a,b,c){
    ////        var d = a>b?a:b;
    ////        return d>c?d:c;
    //        //精简版
    //        return (a>b?a:b)>c?(a>b?a:b):c;
    //        //判断a和b
    ////        if(a>b){
    ////            //如果a大判断a和c
    ////            if(a>c){
    ////                return a;
    ////            }else{
    ////                return c;
    ////            }
    ////        }else{
    ////            //如果b打,判断b和c
    ////            if(b>c){
    ////                return b;
    ////            }else{
    ////                return c;
    ////            }
    ////        }
    //    }
    
    
        //求一组数中的最大值
    //    var arr = [-3,-2,-1,0,1,2,3];
    //    var maxValue = getArrMax(arr);
    //    console.log(maxValue);
    //    console.log(getArrMax(arr));
    //
    //    function getArrMax(array){
    //        //用的必须是形参的数组中的第一项。
    //        var max = array[0];
    //        for(var i=1;i<array.length;i++){
    //            if(array[i]>max){
    //                max = array[i];
    //            }
    //        }
    //        return max;
    //    }
    
        //求一组数中的最小值
    //        var arr = [-3,-2,-1,0,1,2,3];
    //        var minValue = getArrMin(arr);
    //        console.log(minValue);
    //        console.log(getArrMin(arr));
    //
    //    function getArrMin(aaa){
    //        //把数组中的第一位默认为,最小值。
    //        var min = aaa[0];
    //        for(var i=1;i<aaa.length;i++){
    //            //判断数组中的每一项,如果下雨min,那么把他赋值给min
    //            if(aaa[i]<min){
    //                min=aaa[i];
    //            }
    //        }
    //        //书写位置要注意,一定是这个for循环执行完毕之后再返回
    //        return min;
    //    }
    
    
        //翻转数组,返回一个新数组
        //用两种方法做,第一种创建心数组。第二种直接修改原数组。
    //    var arr1 = [1,2,3];
    //    var arr2 = reverse1(arr1);
    //    console.log(arr2);
    //    console.log(reverse1(arr1));
    //    //定义一个新数组,把老数组中的元素反向添加到新数组中
    //    function reverse1(array){
    //        var newArr = [];
    //        for(var i=array.length-1;i>=0;i--){
    //            newArr[newArr.length] = array[i];
    //        }
    //        return newArr;
    //    }
    
    //    var arr = [1,2,3];
    //    console.log(arr);
    ////    console.log(reverse2(arr));
    //    reverse2(arr);
    //    console.log(arr);
    //    //修改或者说翻转原数组,此方法没有返回值,所以只能打印原数组。
    //    function reverse2(array){
    //        for(var i=0;i<array.length/2;i++){
    //            var temp = array[i];
    //            array[i] = array[array.length-1-i];
    //            array[array.length-1-i] = temp;
    //        }
    //        return array;   //Array对象中的方法返回了一个数组。
    //    }
    
    
        //对数组排序,从小到大
    
    //    var arr = [2,1,3,4];
        var arr = [4,3,2,1];
        console.log(bubble(arr));
    
        function bubble(array){
            //外循环控制轮数(元素-1)
            for(var i=0;i<array.length-1;i++){
                //开闭原则(标志,标识,旗帜)
                var flag = true;
                //内循环控制次数(元素-1)
                for(var j=0;j<array.length-1-i;j++){
                    //判断符合标准就交换位置
                    if(array[j]>array[j+1]){
                        var temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                        flag = false;
                    }
                }
                if(flag){
                    //此情况在数组是极限从大到小排列下,会出现问题。每一轮flag都是false,最终无返回值。
    //                return array;
                    break;
                }
            }
            //有了return执行完毕方法后,就可以用变量接收返回值!
            return array;
        }
    View Code


    函数名,就等于整个函数。
    执行函数,就等于函数的功能+返回值;

    打印函数名,就等于打印整个函数。
    console.log(fn);
    //打印执行函数,就等于打印函数的返回值。
    console.log(fn()); //函数中包函数,先执行里面,后执行外面。

    二、函数的定义

    第一种定义方法最强大,定义完毕后,在哪里使用都可以,无位置限制。
    fn1();
    后两种定义方法是有局限性的。(使用函数必须在定义函数之后)
     fn2();
     fn3();


    第一种
    function fn1(){
    console.log("我是第一种定义方法!");
    }

    第二种(匿名函数)

    var fn2 = function (){
    console.log("我是第二种定义方法!");
    }

     第三种

    var fn3 = new Function("console.log('我是第三种定义方法!')");

     fn1();
     fn2();
     fn3();

    三、变量

    变量问题:根据作用范围,变量可以分为局部变量和全局变量。

    局部变量:只有局部能够访问的变量。
    函数内部用var定义的变量。
    全局变量:在哪里都能访问到的变量。
    函数外部或者进入javascript之后立即定义的变量和函数内部不带有var的变量。

     var num3 = 333;
    函数加载的时候,只加载函数名,不加载函数体。
     function fn(){
    局部变量
     var num1 = 111;
    全局变量(成员变量)
    num2 = 222;
     console.log(num3);
     }

     fn();
     console.log(num1);
    console.log(num2);
    console.log(num3);

    块级作用域,js中没有。
    {
    // var aaa = 1;
    // }

    隐式全局变量
    function fn(){
    b和c都是隐式全局变量
    var a = b = c = 1;
    e和 f都是隐式全局变量(分号相当于换行)
    var d = 1;e =2;f=3;
    g和i都不是隐式全局变量
    var g = 1,h= 2,i=3;
    }

    fn();
    console.log(b);
    console.log(c);
    console.log(e);
    console.log(f);
     console.log(a);
     console.log(h);
    console.log(i);

    5.预解析:js的解析器在页面加载的时候,首先检查页面上的语法错误。把变量声明提升起来。
    变量值提升变量名,不提升变量值。而用function直接定义的方法是整体提升。
    1.查看语法错误。
    2.变量声明提升和函数整体提升(变量声明提升的时候,只提升变量名,不提升变量值)
    3.函数范围内,照样适用。
    var aaa;
    console.log(aaa);
    aaa = 111;
    fn();

    function fn(bbb){
    变量声明提升在函数内部照样实用。
    函数的就近原则。
    var aaa;
    console.log(aaa);
    aaa = 222;
    }

    function fn2(bbb){
    两个函数中的局部变量不会相互影响。
    console.log(bbb);
    }

  • 相关阅读:
    《深入浅出WPF》4.0x名称空间
    《深入浅出WPF》3.0 XAML语法
    DataGridview 自动切换到 下一行
    C# 生成条形码图片,效果不错
    将DataTable 导出为csv
    DataTable,DataGridVIew转换到xls 方法 (转)
    NPOI读取Excel 数据 转。。。
    修改 字段大小
    VC
    统计每天 指定 时间段内 的数据
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9437429.html
Copyright © 2020-2023  润新知