JS函数介绍与基础

函数

在开发过程中, 一段代码在多个地方执行, 而且不连续执行的时候可以使用函数

   function hanshumin(arr){
   for(var i=0;i<arr.length;i++){
	console.log(arr[i]);
		}
   }
   var str=[10,20,30];
   hanshumin(str);

函数声明 :

  1. 函数声明 function 函数名() {
    函数体 : 代码块
    }

函数声明的特点 : 只是将一段代码保存在变量里面, 但是不会执行

  1. 函数调用 调用语法 : 函数名();
    特点 : 执行保存在函数体里面的代码
    buySmoking();

  2. 函数的好处 :
    (1) 解决代码冗余的问题, 便于维护
    (2) 使用方便

  3. 和循环的区别 :
    (1) 作用不一样
    循环 : 只能在同一个地方,重复执行同一段代码
    函数 : 可以在多个地方, 重复执行同一段代码
    (2) 本质不一样
    循环 : 只是一种语法, 代表代码重复执行
    函数 : 是一种数据类型, 里面存储的是一段代码

函数参数 :

  1. 函数的参数 : 让调用者可以传递数据给函数
    函数参数是在函数内部声明的一个变量 声明的时候, 并没有赋值 我们把它叫做形参(形式参数)
    参数声明语法 : function 函数名(形参) {
    函数体
    }
    参数的赋值 : 是发生在调用阶段 我们传递的数据叫做实参(实际参数)
    参数赋值语法 : 函数名(实参);

  2. 函数的形参可以是多个 多个形参之间使用逗号隔开 如果调用的时候不传参数(实参), 参数就是undefined, 如果只传一个 那么就是只给第一个
    buySmoking(“liuqian”);

  3. 在调用的时候, 实参的个数可以不和形参相等, 实参的赋值是按照形参的顺序进行赋值

  4. 函数的每一次调用都是独立的

函数返回值 :

break 跳出循环 (终止循环)
return 终止函数的执行, 并将指定的值返回给调用者
作用和break在循环中类似, 对于return以后的函数体代码都不会执行
函数的返回值
返回值就是return 终止函数体执行之后, 返回给调用者的数据
1. 如果没有return 或者return后面没有接值, 那么函数的返回值是undefined
2. 如果return后面接了值, 那么就返回该值
3. return 只能用在函数体中, 用在其他语句中, 会出现报错

参数 :
传参数 : 调用者
接参数 : 函数接

返回值 可以声明一个变量来接收 var 变量名 = 函数名(参数);

参数 返回值
无参数 无返回值 用得少 因为无参数无返回值 就是单纯执行一段代码
有参数无返回值 用得少 只是在函数内部做一些运算, 输出数据
无参数有返回值 用得少
有参数有返回值 用的最多 根据外部传入的数据进行计算, 将运算结果返回给调用者

变量作用域 :

  1. 什么是变量作用域? 变量作用域就是变量可以起作用范围
  2. 变量作用域的分类 :
    (1) 全局作用域 全局变量 : 就是可以在全局作用域范围内起作用
    (2) 局部作用域(函数作用域) : 有函数划分出来的作用域
    局部作用域里面声明的变量 叫做局部变量
    函数可以分割作用域 就是局部作用域
    特殊点 : 所有没有使用var定义的变量都是全局变量
    (3) 块级作用域 块级作用域通过let和const关键字来实现

let

作用和var一样 都是用来声明变量的
a. 在同一作用域内 不能重复声明
b. let声明的变量不能在声明前使用
c. 变量的暂时性死区 : 在有一个作用域内 从作用域顶端到变量定义之前
d. let只在块级作用域里面起作用 块级 : 指的是代码块 { }

块级
指的是一对大括号包起来的部分, 函数 if for 这些结构里面声明的变量都只能在对应的大括号里面起作用

const

用来声明常量的, 在同一作用域内, 不能重新声明, 也不能重新赋值

  1. 最外层函数和在最外层函数外面定义的变量都拥有全局作用域
  2. 所有未定义直接赋值的变量都拥有全局作用域
  3. 所有window对象的属性拥有全局作用域
    window.name window.location

变量的提升 :

程序在执行时, 变量的声明提升到所在作用域的最顶端, 赋值留在原地, 按照顺序结构执行

作用域:

作用域链是怎么来的 ?
我们默认js代码都处于全局作用域中, 当我们声明一个函数之后, 这个函数就分割出了一个局部作用域, 然后我在这个函数的函数体里面再声明一个函数, 又会开辟出新的局部作用域, 以此类推, 就形成了一个嵌套多层的作用域链

作用域链的访问规则 :
就近原则 先从本级作用域查找, 找不到依次往上找, 找到顶级作用域还没有, 就会报错

var num = 45;
        function sum (n1, n2) {

            var num = 20;  //20
            console.log(num);
            

            function f1() {
                var num = 40;
                console.log(num);  

                function f2() {
                    console.log(num);
                }
                f2();

                function f4() {
                    console.log(f4);
                }
            }
            f1();
        }

        function f3() {
            console.log("f3");
            
        }

        console.log(num);  // 45
        
    sum();

练习

1.任意圆的面积

	var r=+prompt("请输入圆的半径");
	function yuan(r){
		var sum;
	sum=Math.PI*Math.pow(r,2);
		return sum;
	}
	var yuanS=yuan(5);
	document.write(yuanS);
document.write("圆的面积为:"+yuan(r));

2.判断任意两个数的大小

var m=+prompt("请输入一个数");
var n=+prompt("再输入一个数");
function panduan(m,n){
	return m<n?n:m;
}
document.write("最大值为:"+panduan(m,n));

3.m , n之间所有整数,并判断最大最小值.

function panduan(m,n){
	var arr=[];
	if(m<n){
		for(var i=m;i<=n;i++){
			arr[arr.length]=i;
		}
		console.log("最大值为:"+n+" ","最小值为:"+m+" ",arr+" ");
	}else{
		for(var i=n;i<=m;i++){
		arr[arr.length]=i;
	}
	console.log("最大值为:"+m+" ","最小值为:"+n+" ",arr+" ");
	}
}
console.log(panduan(5,8));

4.输入一个数组判断最大最小值

function panduan(arr){
	var max=-Infinity;
	var min=Infinity;	
		for(var i=0;i<arr.length;i++){
		if(arr[i]>max){
				max=arr[i];
			}
			if(arr[i]<min){
				min=arr[i];
			}
		}
		console.log(max,min);
		return "最大值为:"+ max+"最小值为:"+min;
}
str=[10,50,70,40,30,30];
console.log(panduan(str));

5.函数中定义3个数,判断大小

//			方法1
			function panduan(x,y,z){
				if(x>=y&&x>=z){
					return x;
				}else if(y>=x&&y>=z){
					return y;
				}else if(z>=y&&z>=x){
					return z;
				}
				
			}
			console.log(panduan(5,8,1))
			
			
			
			
			
//			方法2
			function daxiao(m,n){
				return m<n?n:m;
			}
		
			function panduan(m,n,k){
				var num1=daxiao(m,n);
				var num2=daxiao(num1,k);
				return num2;
		}
			console.log(panduan(5,8,7));  

6.分别定义四个函数,接收两个数字,返回这两个数字的和,商,差,积

	var m=+prompt("请输入一个数");
	var n=+prompt("请再输入一个数做计算");
	function jiafa(m,n){
		var s=m+n;
		return s;
	}
	function chufa(m,n){
		var v=m/n;
		return v;
	}
	function jianfa(m,n){
	var f=m-n;
		return f;
	}
	function chengfa(m,n){
		var k=m*n;
		return k;
	}
	
console.log("和为:"+jiafa(m,n));
	console.log("商为:"+chufa(m,n));
	console.log("差为:"+jianfa(m,n));
console.log("积为:"+chengfa(m,n));

7.定义一个函数,接收三个参数,并实现三个变量的排序输出

function paixu(m,n,k){
	var arr=[m,n,k];
for(var i=0;i<arr.length-1;i++){
		for(var j=0;j<arr.length-1-i;j++){
			if(arr[j]>arr[j+1]){
				var temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
}
return arr;
} 
console.log(paixu(1,5,2));

8.写一个函数,实现翻转数组,返回一个新数组
例如 fn([10,20,30,40,50]) 得到[50,40,30,20,10]

function fanzhuan(arr){
	var newarr=[];
	for(var i=arr.length-1;i>=0;i--){
		newarr[newarr.length]=arr[i];
	}
	return newarr;
}

var fn=[10,20,30,40,50];
document.write(fanzhuan(fn));

9.写一个函数,既可以实现对数组排序从小到大,也可以从大到小
提示 函数有两个参数 一个是要排序的数组 二个是排序的方式
别忘记在一个函数体中可以调用另外一个函数哟

  function big(arr,arr2){
    	function paixu(arr){
			for(var i=0;i<arr.length-1;i++){
				for(var j=0;j<arr.length-1-i;j++){
					if(arr[j]>arr[j+1]){
						var temp=arr[j];
						arr[j]=arr[j+1];
						arr[j+1]=temp;
					}
				}
			}
			return arr;
			}
			
		function paixu2(arr){	
			for(var i=0;i<arr.length;i++){
				for(var j=0;j<i;j++){
					if(arr[i]>arr[j]){
						var temp=arr[j];
						arr[j]=arr[i];
						arr[i]=temp;
					}
				}
			}
			return arr;
		} 
		if(arr2==true){
			return paixu(arr);
		}else{
			return paixu2(arr);
		}
    }
    
		var fn=[10,20,30,40,50];
		
		document.write(big(fn,true));

10.输入一个年份,判断是否是闰年[闰年:能被4整数并且不能被100整数,或者能被400整数]
写一个判断平年闰年的函数

  function panduan(year){
    	if((year%4==0&&year%100!=0)||year%400==0){
    		return "闰年";
    	}else{
    		return "平年"
    	}
    }
    document.write(panduan(2004));

11.写一个函数输入某年某月某日,判断这一天是这一年的第几天?
提示:一年中除了二月份的天数不同,其他天数是固定的

function panduan(year,mon,day){
		var count=0;
		switch (mon){
			case 12:	
				count+=30;
			case 11:
				count+=31;
			case 10:
				count+=30;
			case 9:
				count+=31;
			case 8:
				count+=31;
			case 7:
				count+=30;
			case 6:
				count+=31;
			case 5:
				count+=30;
			case 4:
				count+=31;
			case 3:
				count+=28;
			case 2:
				count+=31;
			case 1:
				count+=day;
			default:
				break;
		}
		if(((year%4==0&&year%100!=0)||year%400==0)&&mon>2){
			count++;
		}
		return count;
	}
	
	document.write(panduan(2008,1,4));

12.写一个函数,随机生成十六进制颜色值比如: #ff6600 16进制指0-f之间的数

 function randomColor(){  
  var color=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f",];
	var val="#";
	for(var i=0;i<6;i++){
		val+=color[Math.floor(Math.random()*16)];
	}
	return val;
}
	document.write(randomColor());   
发布了26 篇原创文章 · 获赞 5 · 访问量 1056

猜你喜欢

转载自blog.csdn.net/weixin_45060872/article/details/103881050
今日推荐