//这段就是为了自己学习和复习时看的,各位大佬看到后不要笑话0 0
函数概念:封装了一段可能重复使用的代码块 目的:就是为了重复使用相同的代码
函数的声明方式
使用:声明函数function 函数名(){中间是函数体;}
function是声明函数的关键字必须小写
调用:函数名() 口诀:函数本身不会执行,调用后才会执行;
使用:函数表达式(匿名函数)
var num1 = function() { console.log('我是函数表达式'); }
num1();
小细节:
1.num1不是函数名,是变量名
2.和声明变量差不多,只不过变量里存的是值,但是函数表达式里存的是函数
3.也可以进行参数传递
课程案例:
// 利用函数声明1-100的和
function num() {
var sum = 0`;`
for(i=1;i<=100;i++) {
sum+=i;
}<br>
console.log(sum);
}
num();
带参数实现函数重复实现不同代码
函数可以不带参数,也可以参数不限个,参数与参数之间用逗号隔开
function num(形参1,形参2....){函数体}
num(实参1,实参2....)
在函数声明()中的是形参,实参是写在调用函数();
重点:形参是用来接受实参的 我个人理解就是在调用函数时读到了实参内容后,传递到函数的形参上,形参类似于一个不声明的变量,接受到后就是形参=实参
课程案例:
//利用函数求任意两个数的和
function num(num1,num2) {
console.log(num1+num2);
}
num(1,100);<br>
//利用函数求任意两个数之间的和
function num(num1,num2) {
var sum = 0;
for(i=num1;i<=num2;i++) {
sum+=i;
}<br>
console.log(sum);
}<br>
num(1,100);
形参个数和实参个数匹配问题
情况1:形参实参个数都匹配,正常输出
情况2:如实参个数多于形参,会取到形参的个数(我觉得正常人应该不会干这事)
情况3:如实参个数少于形参,按照形参看做不声明的变量的结果,多出的形参没有接受到赋值,就会等于undefined 最后返回NaN 一定要记住一个变量如果没赋值就是会等于undefined
函数的返回值 return语句
function 函数名() {
return 要返回的结果;
}
函数名();
只要函数遇到了return 就把后面的结果赋值给了函数名(); 函数名() = return 后面的结果
// 课程案例:
//function num(aru) {
//return aru;
// }
错误:只写函数调用num(),那都告诉你了num() = aru,你这么写什么都不会输出
正确:console.log(num('学习'));
// 利用函数求一个任意数组中最大值
function num(arr) { //因为实参传递过来的是一个数组,所以arr = 一个数组
var max = arr[0];
for(i=1;i<arr.length;i++) {
if(max<arr[i]) {
max = arr[i]
}
}
return max;
}
// 小细节:在实际开发中,经常用一个变量来接受函数返回的结果 使用更简单
var re = num([1,3,5,7]);
console.log(re);
return 终止函数
例子:function num () {
return 666;
return 777;
//777不会被返回哦,写了return,下面得代码就不会再执行了,return也只返回一个值
}
// 拓展小知识:求任意两个数得加减乘除
// 因为return只能返回一个值,可以利用数组得方式返回,想取中间得值就遍历数组就可以了
function num(num1,num2) {
return [num1+num2,num1-num2];
}
var re = num(1,3);
console.log(re);
如果一个函数没有return就会返回undefined
例子:function num() {
}
console.log(num());返回undefined
因为return有终止的作用所以复习一下之前的知识
break,continue,returen的区别:
break:结束当前循环体;
continue:跳过当前循环,继续下次循环(如for,while);
returen:不仅可以退出循环,还可以返回后面的值,同时结束函数体内代码
课后作业:
1.写一个函数,用户输入任意两个数字进行算数运算并且弹出运算后的结果
var num1 = prompt('请输入第一个数');
var num2 = prompt('请输入第二个数');
var ysf = prompt('您要进行什么运算');
function num(num1,num2,ysf) {
if(ysf==='+') {
return parseInt(num1)+parseInt(num2);
}else if(ysf === '*') {
return parseInt(num1)*parseInt(num2);
}else if(ysf === '/') {
return parseInt(num1)/parseInt(num2);
}else if(ysf === '-') {
return parseInt(num1)-parseInt(num2);
}
}
var re = num(num1,num2,ysf);
console.log(re);
2.写一个函数,用户任意输入两个数求最大值,并弹出对比后的结果
var num1= prompt('第一个数:');
var num2= prompt('第二个数:');
function num(num1,num2) {
if(parseInt(num1)>parseInt(num2)) {
return num1;
}else {
return num2;
}
}
var re = num(num1,num2);
alert(re);
3. 写一个函数,用户任意输入三个数求最大值,并弹出对比后的结果
var num1= prompt('第一个数:');
var num2= prompt('第二个数:');
var num3= prompt('第三个数:');
function num(num1,num2,num3) {
var max =0;
if(parseInt(num1)>parseInt(num2)) {
max=num1;
}else {
max=num2;
}
if(max>parseInt(num3)) {
return max;
}else {
max = num3;
return max
}
}
// 这边其实用三元运算符做比较好。。但是我有点忘记了,不在家里,就先用这个做了
var re = num(num1,num2,num3);
alert(re);
arguments的使用
当我们不确定有多少个参数传递的时候,可以用arguments来获取,在js中,arguments实际上他是当前函数的一个内置对象,所有函数都内置了一个arguments对象,存储了传递过来的所有实参
// arguments的使用 使用场景当你不知道用户会输入几个实参的时候使用 只有函数才有这个方法
// 具有伪数组的形式
// 1.具有length属性
// 2.按照索引的方式储存
function num() {
// console.log(arguments);
想要取出里面的内容就遍历
for(i=0;i<arguments.length;i++) {
console.log(arguments[i]);
}
}
num(1,2,3);
课程案例:
1.利用函数求任意数的最大值
function num() {
var max = arguments[0];
for(i=1;i<arguments.length;i++) {
if(max<arguments[i]) {
max = arguments[i];
}
}
console.log(max);
}
num(1,3,5,8);
2.翻转任意数组
function num(arr) {
var newArr = [];
for(i=arr.length-1;i>=0;i--) {
newArr[newArr.length] = arr[i];
}
return newArr;
}
console.log(num([5,4,3,2,1]));
3.判断闰年
var num1 = prompt('请输入一个年份:');
function num(num1) {
if(num1%4==0&&num1%100!=0||num1%400==0){
return true;
}else {
return false;
}
}
var re = num(num1);
console.log(re);
函数之间可以互相调用
我们从代码执行步骤来看,先看到fn1声明函数后本身不执行,往下读取到调用函数fn1(),这时候再进到函数内看,先打印了一个11,又看到了fn2调用,在进到fn2声明函数中打印了22,这就是函数之间相互调用
function fn1() {
console.log(11);
fn2();
}
fn1();
function fn2() {
console.log(22);
}
最后输出得第一行11,第二行22