// 函数
// 声明方式:2种
// 1.字面量声明
// 语法: function 函数名 (参数1,参数2) { 函数体 }
// 参数是可有可无的,实参和形参的个数尽量匹配使用,这是规范
// 写在函数声明的小括号里的参数叫做形参
// 写在调用小括号里的叫做实参
// 形参和实参的区别:形参是形容参数使用的,不是具体的值,实参是根据调用时传递的值决定的,是一个具体的值
// eg:
// arr就是形参,具体是什么还不知道
// function getSum(arr) {
// var sum = 0;
// for (var i = 0; i < arr.length; i++) {
// sum += arr[i]
// }
// console.log(sum);
// }
// // [1,2,3]就是实参,是一个具体的数值
// getSum([1, 2, 3])
// 2.匿名函数(变量声明)
// 语法:var 变量名 = function (参数1,参数2) { 函数体 }
// arr是形参,需要从外部传递
// var getSum = function (arr) {
// var sum = 0;
// for (var i = 0; i < arr.length; i++) {
// sum += arr[i]
// }
// console.log(sum);
// }
// // [2,3,4]就是实参
// getSum([2,3,4])
// 注意:函数声明后,不会自己执行,需要调用才会执行
// 函数返回值
// 1.如果不写return,或者只写return,那么返回值都是undefined
// 2.如果需要返回值,就在return后面添加要返回的数据
// 3.函数的返回值是由renturn来决定的
// 4.函数一旦执行了return,那么后面的代码就不会执行了,所以return通常写在函数的最后一行
// 5.实际开发写法,会将函数的返回值保存在一个变量中去使用
// function getSum(arr) {
// var sum = 0;
// for (var i = 0; i < arr.length; i++) {
// sum += arr[i]
// }
// // return [1,2,3]
// return sum
// console.log(sum);
// }
// // console.log(getSum([1, 2, 3]));
// var result = getSum([1, 2, 3])
// console.log(result);
// 函数之间的相互调用
// function fn1(){
// console.log(1);
// console.log(2);
// fn2()
// console.log(3);
// }
// function fn2(){
// console.log(4);
// }
// fn1()// 1243
// 原则:执行代码的时候是从上往下执行,如果碰到了调用其他函数,先去执行其他函数,当其他函数执行完成后,在继续执行当前函数
// 函数的内置参数对象
// arguments:是在函数内容使用的,系统帮我们定义的对象
// eg:
// function getSum(num1,nm2){
// // arguments原理:
// // var arguments = []
// // arguments[arguments.length] = num1
// // arguments[arguments.length] = num2
// // ...
// // arguments[arguments.length] = numx
// }
// 使用场景:当我们不知道函数调用的时候会传递多少个实参的时候,我们可以不定义形参,直接使用内置参数对象argunments,它是一个数组,包含了每一个实参
// 实际应用:
// function getSum(){
// var sum = 0;
// for(var i=0;i<arguments.length;i++){
// sum+=arguments[i]
// }
// console.log(sum);
// }
// getSum(1,2,3,4,5)
// // 原理分析:
// function getSum(){
// // 系统相当于帮我们做了这样一件事,所以我们可以直接使用arguments
// // var arguments = [];
// // arguments[0] = 1
// // arguments[1] = 2
// // arguments[2] = 3
// // arguments[3] = 4
// // arguments[4] = 5
// var sum = 0;
// for(var i=0;i<arguments.length;i++){
// sum+=arguments[i]
// }
// console.log(sum);
// }
// 函数的作用域:
// 全局作用域: 在script标签内的区域,或者是单独的js文件
// 局部作用域(函数作用域):在函数内部的区域
// 全局作用域下声明的变量叫做全局变量
// 全局变量可以在任何一个地方使用
// 局部作用域下声明的变量叫做局部变量
// 局部变量只能在函数内部使用
// 作用域链:
// 当局部作用域使用一个变量,但是找不到的时候,他会顺着自己的作用域向上查找,直到全局作用域位置,这样会形成一条链,就是作用域链
// 作业:需要封装的函数:
// 1.利用函数实现求数组的和,及平均值
// 2.利用函数实现求数组的最大值,最小值
// 3.利用函数实现翻转数组
// 4.利用函数实现冒泡排序
// 5.利用函数实现判断润年然后提示2月有多少天
// 5.利用函数实现任意两个数之间的求和