• function函数


    1.函数的定义
    定义函数使用关键字  function
     
    1、关键字定义方式:
        
         function 函数名(参数1,参数2...){
              功能//函数体
         }
     
         function showInfo(name,age,hobby){
              alert('大家好,我叫' + name + ',今年' + age + '岁,我喜欢'+hobby);
         }
     
    2、字面量定义方式:
         
         var 函数名 = function(参数1,参数2...){
              //函数体
         }
         
         var showInfo = function(name,age,hobby){
              alert('大家好,我叫' + name + ',今年' + age + '岁,我喜欢'+hobby);
         }
         
     
         说明:函数名就是一个变量
     
    3、Function构造函数(很少用)
         
         var 函数名 = new Function(参数,函数体);
         
         var showAge = new Function('age','alert(age)');
     
    函数有什么用?(理解)
     
    将重复的代码放到一个函数中 ,可以做到:  
     
    1、减少代码的编写(代码重用)   
     
    2、便于修改和控制(维护)      
     
    3、需要的时候再使用
     
     
    函数的特点
     
    1、函数自己无法运行,调用时才会执行函数体内的代码块   
     
    2、可以多次使用
     
     
    参数(重)
     
    1、什么是参数?
       在定义函数的时候,在()里面可以定义一些变量,用于接收调用的时候传过来的数据
     
       函数的()中定义的变量及调用时传入的数据都是参数
     
       参数:
         1、函数的()中定义的变量
         2、调用函数时传入的数据
     
    2、为什么要定义参数?
       1、让函数变得更加灵活(实现函数的多功能)
       2、实现函数的作用
     
    3、怎么定义参数(形参)?(形式参数)
       1、在函数定义的时候括号里面写的变量
       2、形参可以定义多个
       3、每个形参之间用逗号隔开  ,
       4、形参其实就是个变量(遵循变量规则)
     
       function print(arg1,arg2,arg3...){}
     
    4、怎么传入参数(实参)?(实际参数)
       1、调用函数时,写在括号里的值(变量)就称之为  实参
       2、多个实参之间使用逗号隔开
     
    参数解读(重)
     
    1、形参和实参什么关系?
       a、形参和实参之间是一一对应的关系
       b、如果对应的形参没有传值,那么值是undefined
     
    2、javascript函数的参数与大多数其他语言的函数的参数有所不同。函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数。
     
    arguments(重)
     
    1、函数内部自带的一个对象,形式和数组类似(被Arguments创造出来的)
     
    2、存储的是所有的实参(调用功能传入的参数)
     
    3、可以使用[]及下标访问arguments中的内容   arguments[0]  访问第一个实参
     
    4、可以使用 arguments.length 确定传入实参的个数  (arguments['length'])
     
     
    最常用的用途: 判断传入参数的个数(根据参数个数做不同的事情)
    1、定义一个加法功能,计算传入的所有数字的和*/
    	/*function Sum(){
    		var sum=0;
    		for(i=0;i<arguments.length;i++){
    			sum+=arguments[i];
    		}
    		alert(sum);
    	}
    	Sum(3,4)*/
    	
    /*//2、定义一个功能getMax,传入任意个数字,返回最大值
    	function getmax(){
    		var max=0;
    		for(i=0;i<arguments.length;i++){
    			if(arguments[i]<arguments[i+1]){
    				max=arguments[i+1];
    			}		
    		}
    		alert(max);
    	}
    	getmax(2,6,4,20,18,13);*/
    
    //3、定义一个运算功能,参数为(x,y),当传入1个数字时,求x的阶乘,如果传入两个数字,求x的y次方
    	function getNam(){
    		var num=1;
    		if(arguments.length==1){		
    			for(var i=1;i<=arguments[0];i++)
    			{	num*=i;
    				return num;
    			}
    		}else{
    			return Math.pow(arguments[0],arguments[1]);
    		}		
    	}	
    	var a=getNam(3,2);
    	console.log(a);
    

      

    什么是递归?
     
    自己玩自己 
    function f(){
         console.log(1);
         f();
    }
    间接的玩自己
    function f1(){
         f2();
    }
    function f2(){
         f1();
    }
     
    对于递归而言,最重要的是跳出结构,因为只有跳出结构才可以有结果
     
    其实所谓的递归就是化归思想
     
    递归调用函数,写一个递归函数,最终还是要转换为自己这个函数
     
    递归的思想就是将一个问题转化为一个已解决的问题来实现。
     
    注意:递归就是在过程或函数里调用自身;使用递归策略时要注意的几个条件
    1、必须有一个明确的递归结束条件,称为递归出口。
    2、递归需要有边界条件、递归前进段和递归返回段。
    3、当边界条件不满足时,递归前进。当边界条件满足时,递归返回。
     
    //求1到一百的和
    function fn(n){
         if(n<1)
         {
             return 0; //跳出循环的条件
         }
         return n+fn(n-1);//依次递减的规律
    }
    var sum=fn(100);
    console.log(sum)
    

      

     
    变量的声明提升
     
    浏览器在执行代码之前,会对所有的声明语句,进行提升(把声明代码提升至该作用域的最前面)然后再按顺序执行代码
     
    var n = 10;
    function test(){
         console.log(n); //undefined
         var n = 20;
         console.log(n); //20
    }
    test();
    var x = 100;
    function test(x){
         x+=100;
    }
    test(x);//执行完释放
    console.log(x); //100


    变量的声明提升
     
    tt='ee';
    function  b(){
        function test(){ 
              alert(tt);
             tt='ff';
         }
         test()
    }
    b()
     
     

     
     
     
    var tt='123'
    function test(){
         var tt;
         alert(tt);
         tt='ff';
    }
    test();
     

     
    2、tt='ee';
    function  b(){
       function test(){
           alert(tt);
           /*var tt='ff';*/
       }
       test()
    }
    b()
     
     
     
    实战
     
    1、
         console.log(a);
         var a = 10;
         console.log(a);
     
    2、
        console.log(test);
        var test = function(){
            console.log(1);
        }
        function test(){
            console.log(2);
        }
        console.log(test);
     
     
    思考1
     
    var age = 10;
    function test(){
         console.log(age); 
    }
    test();
     
    打印什么?
     
     
    思考2
     
    var age = 10;
    function test(){
         console.log(age); 
         var age = 20;  
         console.log(age); 
    }
    test();
     
    打印什么?
     
    编写一个函数,计算两个数字的和差积商
    
    function calculator(num1,num2,sign){
         switch(sign){
              case "+" : console.log(num1+num2); break;
              case "-" : console.log(num1-num2); break;
              case "*" : console.log(num1*num2); break;
              case "/" : console.log(num1/num2); break;
         }
    }
    

      

    编写函数,判断一个字符串的内容是不是纯数字
    
    function isANumber( str ){
         var n = Number(str);
         if( typeof n == "number" && !isNaN(n) ){
              alert("是一个纯数字!");
         } else {
              alert("不是一个纯数字");
         }
    }
    isANumber("df589");
    
    isNaN();  判断一个变量是否为NaN  是的话返回true   不是的话,返回false

    //1、编写函数,判断一个字符串的内容是不是纯数字
    function isNumber(str) {
    if(isNaN(Number(str))){
    result.value='非数字'
    }else{
    result.value='纯数字';
    }
    }

    编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。
    
    function digit(num, k){
        for(var i=1; i<k; i++){
            num /= 10;
        }
        return parseInt(num)%10;
    }
    console.log(  digit(123456, 8) );
    

      

    7、编写一个函数,计算任意两个数字之间所能组成的奇数个数,数字必须是个位数。
    //比如:计算0~3之间能组成的奇数是: 01、03、13、21、23、31	
    	function fuName(a,b){
    		var sum;
    		for(i=0;i<=b;i++){
    			for(j=0;j<=b;j++){
    				if(j%2!=0&&j!=i){					
    				sum=i*10+j;
    				document.write(sum+" ");
    				}
    			}		
    		}
    		
    	}
    	 fuName(3,5)
    

      

      

     
  • 相关阅读:
    解决Warning: Cannot modify header information headers already sent b...
    C#获取文件路径的几种方法
    C#反射技术之一读取和设置类的属性
    WPF中,在WebBrowser中操作源代码
    WPF 的 TabControl 绑定不同的窗口集合
    C#_在VS2010下进行单元测试
    Mvvm Light Toolkit for wpf/silverlight系列之Command和Events
    VS2005和VS2008快捷键大全(转)
    nchar,char,varchar 与nvarchar区别
    处理问题:windows server 2016由于没有远程桌面授权服务器可以提供许可证,远程会话被中断。请跟服务器管理员联系...
  • 原文地址:https://www.cnblogs.com/qiuying/p/7403817.html
Copyright © 2020-2023  润新知