JavaScript-Day04

function练习

// - 求2个数中的最大值

//    function getMax(num1, num2) {
//      return num1 > num2 ? num1 : num2;
//    }
//    console.log(getMax(10,20));
//    //console.log(getMax);//函数的代码

//    function getMax(num1, num2) {
//      return num1 > num2 ? num1 : num2;
//    }
//    var num1=10;
//    var num2=20;
//    //函数外面的num1和函数的形参num1不是同一个变量
//    var result=getMax(num1,num2);
//    console.log(result);
//console.log(getMax);//函数的代码


//    - 求3个数中的最大值

function getThreeMax(x, y, z) {
  return x > y ? (x > z ? x : z) : (y > z ? y : z);
}
console.log(getThreeMax(10,2,24));


//    - 判断一个数是否是素数(质数),只能被1和自身整除,质数是从2开始
//用这个数字和这个数字前面的所有的数字整除一次(没有1的,没有自身的)

function isPrimeNumber(num) {
  for(var i=2;i<num;i++){
    if(num%i==0){
      //说明有一个数字整除了,就没有必要向后继续整除了,此时就已经验证出不是质数
      return false;
    }
  }
  return true;
}
console.log(isPrimeNumber(8)?"是质数":"不是质数");

// var result=isPrimeNumber(2);
// if(result){
// console.log("这个数字是质数");
// }else{
// console.log("这个数字不是质数");
// }

//求两个数字的差
function getSub(x, y) {
return x - y;
}
console.log(getSub(10, 20));

//求一组数字中的最大值
function getArrayMax(array) {
  //定义变量假设这个变量中存储的是最大值
  var max = array[0];
  for (var i = 0; i < array.length; i++) {
    if (max < array[i]) {
      max = array[i];
    }
  }
  return max;
}
//    var arr=[10,20,30,40,50];
//    var max=getArrayMax(arr);
//    console.log(max);
var max = getArrayMax([10, 20, 30, 40, 50]);//可以直接把数组传到函数中的
console.log(max);


//求一组数字中的最小值
function getArrayMin(array) {
  //假设这个变量里存储的是最小值
  var min = array[0];
  for (var i = 0; i < array.length; i++) {
    if (min > array[i]) {
      min = array[i];
    }
  }
  return min;
}
//测试----调用函数并传入一个数组,把数组中的最小值直接显示出来
console.log(getArrayMin([10, 20, 30, 40, 1]));


//求一组数字的和
function getArraySum(array) {
  var sum = 0;
  for (var i = 0; i < array.length; i++) {
    sum += array[i];
  }
  return sum;
}
console.log(getArraySum([1, 2, 3, 4, 5, 6]));


//求一个数组中的最大值和最小值还有和
/**
 *  给我一个数组,我返回一个数组(最大值,最小值,和)
 * @param array参数是一个数组
 * @returns {*[]}返回值是一个数组,第一个元素值是最大值,第二个元素值是最小值,第三个元素值是和
 */
function getArrayMaxAndMinAndSum(array) {
  var min = array[0];//最小值
  var max = array[0];//最大值
  var sum = 0;//和
  for (var i = 0; i < array.length; i++) {
    sum += array[i];//和
    //最大值
    if (max < array[i]) {
      max = array[i];
    }// end if
    //最小值
    if (min > array[i]) {
      min = array[i];
    }// end if
  }// end for
  var arr = [max, min, sum];
  return arr;
}
//测试
var resultArray = getArrayMaxAndMinAndSum([1, 2, 3, 4, 5, 6, 7]);
console.log("最大值:" + resultArray[0]);//7
console.log("最小值:" + resultArray[1]);//1
console.log("和:" + resultArray[2]);//28

//通过函数实现数组反转
function reverseArray(arr) {
  for (var i = 0; i < arr.length / 2; i++) {
    var temp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
  }
  return arr;
}
console.log(reverseArray([1, 2, 3, 4, 5]));

//通过函数实现冒泡排序
function sortArray(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;
      }//end if
    }//end for
  }//end for
  return arr;
}
console.log(sortArray([0, 19, 34, 10, 100, 2]));


//求一个数字的阶乘
function getJieCheng(num) {
  var result = 1;
  for (var i = 1; i <= num; i++) {
    result *= i;
  }
  return result;
}
console.log(getJieCheng(5));//1*2*3*4*5
//求一个数字的阶乘和  5  5的阶乘+4的阶乘+3的阶乘+2的阶乘+1的阶乘

function getJieChengSum(num) {//5
  var sum=0;//和
  for(var i=1;i<=num;i++){
    sum+=getJieCheng(i);
  }
  return sum;
}
console.log(getJieChengSum(5));
//1 +2+ 6+ 24+120

//函数内部可以调用其他的函数

//求斐波那契数列,12---144
//1 1 2 3 5 8 13 21 34 55 89 144
function getFib(num) {
var num1=1;
var num2=1;
var sum=0;
for(var i=3;i<=num;i++){
sum=num1+num2;
num1=num2;
num2=sum;
}
return sum;
}
console.log(getFib(12));

//输入,年月日,获取这个日期是这一年的第多少天

//判断这个年份是不是闰年
function isLeapYear(year) {
  return year%4==0&&year%100!=0||year%400==0;
}
//年---月---日:2017年4月28日
function getDays(year, month, day) {
  //定义变量存储对应的天数
  var days = day;
  //如果用户输入的是一月份,没必要向后算天数,直接返回天数
  if (month == 1) {
    return days;
  }
  //代码执行到这里-----说明用户输入的不是1月份
  //用户输入的是7月份23日----1,2,3  +23
  //定义一个数组,存储每个月份的天数
  var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  //小于的是输入的月份-1
  for (var i = 0; i < month - 1; i++) {
    days += months[i];
  }
  //需要判断这个年份是不是闰年
  if(isLeapYear(year)&&month>2){
    days++;
  }
  return days;
}

 console.log(getDays(2000,3,2));





//函数里面可以调用其他的函数

// function f1() {
// console.log("我是一个函数");
// f2();//函数的调用
// }
// function f2() {
// console.log("我也是一个函数");
// }
//
// f1();

//计算n个数字的和
//定义一个函数,如果不确定用户是否传入了参数,或者说不知道用户传了几个参数,没办法计算,但是如果在函数中知道了参数的个数,也知道了,每个参数的值.可以

//定义

// function f1() {
// //获取的是函数在调用的时候,传入了几个参数
// //console.log(arguments.length);
// //使用arguments对象可以获取传入的每个参数的值
// console.log(arguments);
// }

函数定义

/*
* 命名函数:函数如果有名字,就是命名函数
*
* 匿名函数:函数如果没有名字,就是匿名函数
*
* 函数的另一种定义方式
* 函数表达式:
* 把一个函数给一个变量,此时形成了函数表达式
* var 变量=匿名函数;
* 例子:
* var f1=function (){
*
* };
* 如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于是一个函数,就可以直接加小括号调用了
* f1();
*
* 注意:
* 函数表达式后面,赋值结束后,要加分号
*
*
*
* 函数定义:
* 1. 函数声明--函数定义
* function 函数名(){
* 函数体
* }
*
* */

//函数声明,fn是变量,fn是参数,
// function f1(fn) {
// fn();//函数调用---说明fn这个变量中存储的是一个函数
// }
//

// function f2() {
// console.log("哦,这也可以");
// }
// f1(f2);

//结论:函数是可以作为返回值使用的:
function f1() {
console.log("f1函数调用了");
return function () {
console.log("这是一个函数");
};
}

var ff=f1();//调用
//ff就是一个函数了
ff();

//预解析:提前解析代码
/*
*
* 预解析:就是在解析代码之前
* 预解析做什么事?
* 把变量的声明提前了----提前到当前所在的作用域的最上面
* 函数的声明也会被提前---提前到当前所在的作用域的最上面
*
*
* */

//预解析中,变量的提升,只会在当前的作用域中提升,提前到当前的作用域的最上面
//函数中的变量只会提前到函数的作用域中的最前面,不会出去
//预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)

// function f1() {
//
// console.log(num);//undefined
// var num=10;
// }
// f1();
// console.log(num);//

f1();//-----报错
var f1=function () {
console.log(a);
var a=10;
};

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,716评论 2 17
  • 1、使用typeof bar ===“object”来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免...
    深海鲫鱼堡阅读 655评论 1 1
  • 1、使用typeof bar ===“object”来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免...
    我是大橙阅读 567评论 0 1
  • 本文档内容参考 《JavaScript 闯关记》之函数 函数是一段代码,它只定义一次,但可以被执行或调用任意次。在...
    穿越人海遇见你阅读 992评论 0 1
  • 是什么 一门脚本语言 一门解释型语言 动态类型语言 基于对象的语言 弱类型语言 使用场景 网页特效 服务端开发 命...
    珲_cysky2018阅读 421评论 0 0