0
点赞
收藏
分享

微信扫一扫

JavaScript05

A邱凌 2022-02-25 阅读 60

JavaScript05


函数
变量的作用域
函数的作用域
递归

1.函数

Number()/parseInt()/parseFloat()/alert()/prompt()…

函数分为系统函数和自定义函数
函数:是一个功能体,需要提供若干个数据,返回处理的结果;用于封装重复执行的代码

(1)创建普通函数

/*
console.log('卖煎饼了,又香又脆的煎饼');
console.log('所有煎饼一律8折');
*/
//创建函数
function laba(){
  console.log('卖煎饼了,又香又脆的煎饼');
  console.log('所有煎饼一律12折');
}
//调用
//laba();
//laba();
//laba();
//练习:创建函数getSum,在函数体中封装计算1~100之间所有整数的和并打印结果;调用多次
function getSum(){
  //求和
  for(var i = 1,sum = 0;i <= 100;i++){
    sum += i;
  }
  console.log(sum);
}
getSum();
getSum();
getSum();

(2)创建带有参数的函数

//计算任意两个数字相加的和
function add(n1,n2){//形参,用于接收传递的数据
  //console.log(n1 + n2);
  console.log(n1,n2);
}
/*
add(2,3);//实参,传递的数据
add(1,6);
add(3,7);
add(5);
add();
add(1,2,3);
*/
//练习:创建函数getSum,计算1~任意数字之间所有整数的和,调用多次
function getSum(n){
  //计算1~n之间所有整数的和
  for(var i = 1,sum = 0;i <= n;i++){
    //i代表所有的整数
	sum += i;
  }
  console.log(sum);
}
//getSum(100);
//getSum(50);

//练习:创建函数getRun,传递任意两个年份,统计出两个年份之间所有闰年的个数,调用多次
function getRun(n1,n2){
  //循环产生n1~n2之间所有的年份
  for(var i = n1,count = 0;i <= n2;i++){
    //i代表所有年份
	//判断是否为闰年
	if(i % 4 ===0 && i % 100 !== 0 || i % 400 === 0){
	  count++;
	}
  }
  console.log(count);
}
getRun(2000,2100);
getRun(1949,2021);

(3)创建带有返回值的函数

return用于返回函数调用后的结果,如果函数中没有return或者return后不加任何值则返回undefined,一旦return执行就会跳出函数,结束函数的执行。

function add(a,b){
  //函数体
  console.log(a + b);
  //return '大腰子';
  return a + b; //返回函数调用后得到的结果
  //return; //跳出函数
  console.log('执行完毕');
}
//保存函数调用后的结果
//var res = add(81,73);
//console.log('两个数字相加的结果:'+res);

//练习:创建函数getMax,传递任意两个数字返回最大值
function getMax(a,b){
  /*
  if(a > b){
    return a;
  }else{
    return b;
  }
  */
  return a > b ? a : b;

}
//var res = getMax(3,5);
//console.log(res);

//练习:创建函数getMax2,传递任意三个数字返回最大值
function getMax2(a,b,c){
  /*
  if(a > b && a > c){
    return a;
  }else if(b > c){
    return b;
  }else{
    return c;
  }
  */
  var max = a > b ? a : b;
  return max > c ? max : c;
}
//var res = getMax2(3,7,9);
//console.log(res);

//练习:创建函数getStatus,根据订单的状态码返回对应的汉字状态
function getStatus(n){
  switch(n){
    case 1:
	  return '等待付款';
	  //break;
	case 2:
	  return '等待发货';
	  //break;
	case 3:
	  return '运输中';
	  //break;
	case 4:
	  return '已签收';
	  //break;
	case 5:
	  return '已取消';
	  //break;
	default:
	  return '无法追踪';
  }
} 
//var res = getStatus(3);
//console.log(res);

//练习:创建函数isPrime,传递任意一个数字,检测是否为素数,返回布尔型的值。
function isPrime(n){
  //排除1
  if(n === 1){
    return false;
  }
  //检测是否为素数
  //1~n之间是否含有能被整除的数字
  for(var i = 2;i < n;i++){
    //i代表之间所有的事数字
	//如果有能被整除的数字说明不是素数
	if(n % i === 0){
	  return false;
	}
  }
  //如果循环结束后,说明中间没有能被整数的数字
  return true;
}
/*
//var res = isPrime(1);
//console.log(res);
//循环打印1~100之间所有的素数
//产生1~100之间所有的整数
for(var i = 1;i <= 100;i++){
  //console.log(i);
  //查看之间所有的整数是否为素数,只需要把这些整数作为实参传递给isPrime
  var res = isPrime(i);
  //console.log(res);
  //判断结果res是否为true
  //如果是,打印对应的数字i
  if(res){
    console.log(i);
  }
}
*/
//练习:创建函数isRun,传递任意一个年份,检测是否为闰年,返回布尔型的值
function isRun(year){
  //判断year是否为闰年
  /*
  if(year % 4 === 0 && year % 100 !== 0 || year % 400 === 0){
    return true;
  }
  return false;
  */
  return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
}
var res = isRun(2020);
console.log(res);

练习:创建函数getMax,传递任意两个数字返回最大值

练习:创建函数getMax2,传递任意三个数字返回最大值

练习:创建函数getStatus,根据订单的状态码返回对应的汉字状态

1-等待付款 2-等待发货 3-运输中 4-已签收 5-已取消 其它-无法追踪

使用switch-case判断

对比break和returnbreak用于循环和switch-case语句中,跳出所在的这组语句return用于函数中,跳出函数,结束函数的调用

练习:创建函数isPrime,传递任意一个数字,检测是否为素数,返回布尔型的值。

练习:创建函数isRun,传递人一个年份,检测是否为闰年,返回布尔型的值

2.变量的作用域

/*
//全局作用域
//全局变量
var a = '北京城管';
function shi(){
  //函数作用域
  //局部变量
  var b = '石景山城管';
  //访问全局变量
  console.log(a);
}
shi();
//console.log(b);//报错,全局下无法访问局部变量

function hai(){
  //函数作用域
  //局部变量
  var c = '海淀城管';
}


var n1 = 8;//标准的声明全局变量
function fn(){
  //函数内不加var声明的变量是全局变量
  n = 5;
  //给全局变量n1重新赋值
  n1 = 10;
}
fn();
console.log(n);
console.log(n1);
*/

//练习:查看以下程序的输入结果
function fun(){
  var m1 = m2 = m3 = 6;
  //m3 = 6
  //m2 = m3
  //var m1 = m2
}
fun();
console.log(m3); //6
console.log(m2); //6
console.log(m1); //报错


3.函数的作用域

//在程序执行前,会将var声明的变量提升到所在作用域的最前边,只是提升声明,不提升赋值
/*
//var a
console.log(a);//undefined
//a=1
var a = 1;
console.log(a);//1

function fn(){
  //var b //提升
  console.log(b);//undefined
  var b = 2;
  console.log(b);//2
}
fn();


var c = 3;
function fun(){
  //var c;//提升后c值为undefined
  console.log(c);//undefined
  var c = 5;//给当前作用域下的c赋值为5,不会影响全局变量c
}
fun();
//在全局作用域下访问,找的全局变量c
console.log(c);//3
*/

function f1(n){
  //var n=2
  //形参n属于局部变量
}
f1(2);
//console.log(n);//报错,无法访问局部变量n

var m = 5;
function foo(m){
  //var m=7
  //访问的是当前作用域下的m,不会到全局下找m
  m = m + 3;
}
foo(7);
console.log(m);//访问全局的m

斐波那契数列

第1、2项固定是1,从第3项开始每项的值是前两项相加的和

1 1 2 3 5 8 13 21

(2)练习:创建函数fib,传递任意一个数字,返回斐波那契数列下某一项的值

fib(6) -> 8 fib(7) -> 13

循环的方法

function fib(n){
  //第1项和第2项固定是1
  var n1 = 1,n2 = 1;
  //如果要求第n项的值,需要先从求出第3项的值,然后一直往后求出每一项的值,直到第n项
  for(var i = 3;i <= n;i++){
    //每一项值的求法:
    //n2的值是上一次n1和n2相加的和
	//n1的值是上一次n2的值
	//n2代表求出的每一项的值
	var c = n2;
    n2 = n1 + n2;
	n1 = c;
	//打印每一项的值
	//console.log(n2);
  }
  //返回n2最后的结果,也就所求项的值
  return n2;
}
console.log( fib(8) );

举报

相关推荐

0 条评论