/*P26-函数声明函数*/

//函数提高复用性,函数式编程,剪短灵活
//函数的名字最好以动词开头,明确表示要做什么
//function 函数名小括号,语句块就是{}: function fun(){}

function putInRefrigerator(){
    console.log('打开冰箱门');
    console.log('把大象装进去');
    console.log('关上冰箱门');
}

//参数放在括号呢,用,隔开
function putAnythingInRefrigerator(something){
    console.log('打开冰箱门');
    console.log('把'+something+'放进去');
    console.log('关上冰箱门');
}

//带返回值的例子
function add(a,b){
    return a+b;
}

//不返回值的话,可以直接用return
function testNum(num){
    if(num<10) return;
    return num >10;//true返回是Boolean值
}

var getTestNum = testNum(11);
console.log(getTestNum);//true

/*P27-函数-调用*/

//名字+()即可调用。
putInRefrigerator();
/*
index.js:8 打开冰箱门
index.js:9 把大象装进去
index.js:10 关上冰箱门
*/
putAnythingInRefrigerator('兔子');

/*
index.js:15 打开冰箱门
index.js:16 把兔子放进去
index.js:17 关上冰箱门
*/
add(1,2);
console.log(add(1,2));//3

//用一个变量接收函数返回值
var result = add(1,2);
console.log(result);//3

console.log(add(result,5));//8

console.log(testNum(-5));//undefined
console.log(testNum(15));//true

/*P28-函数-表达式*/
//函数表达式,不加(),打印出本体(定义)。

console.log(add);
/** //下面就是函数add的定义,本体。
 ƒ add(a,b){
    return a+b;
}
*/

//可以把add函数本体赋值给另一个变量,产生一个同样功能的函数
var plus = add;
var res = plus(5,6);
console.log(res);//11

//可以把add函数本体赋值给另一个变量,产生一个同样功能的函数
var plus = add;
var res = plus(5,6);
console.log(res);//11

//也可以在函数定义的时候,就直接赋值给一个变量
//VH:这时函数名就失去自己,调用就提示是未被声明,但是参考例子来说就是multiply.name=multiple【可以参考P26-函数-额外.js里面的其他测试】
var multiply = function multiple(a,b){
    return a*b;
    //此处开始不要写代码,不会执行!!!
}
console.log(multiply(6,2));//12
console.log(multiply);//函数定义体ƒ multiple(){return a*b;}
//console.log(multiple);//Uncaught ReferenceError: multiple is not defined
console.log(multiply.name);//multiple

//也可以在函数定义的时候,就直接赋值给一个变量
//这时,函数function后可以不写函数的名字,叫匿名函数
var multiply = function (a,b){
    return a*b;
    //此处开始不要写代码,不会执行!!!
}
console.log(multiply(6,2));//12

/*P29-变量和函数提升 */
//这个可以参考P26-函数-额外里面总结了一些其他情况,还有上面讲到的函数表达式的测试

console.clear();

/*老师的例子:
x =5 ;
console.log(x);//5,因为下方var x会提升到域的最顶部。
var x;
/** */

/*其实下方的var x可以省掉
//因为不用var声明的变量,不生效,但是直接赋值就生效。x = 5直接赋值就生效了。
x =5 ;
console.log(x);//5,因为下方var x会提升到域的最顶部。
/** */

/*那么上下都赋值呢?
//下方例子,打印结果是6,因为下方var x会提升到域的最顶部。
//但赋值的5是在原位置,console.log执行时还没有运行x赋值5。
x =6 ;
console.log(x);//6,
var x= 5;
/** */

/*函数提升
//好处是,把函数定义都写在最下面,上面都是使用过程,比较清晰
//下面的例子,上下都打印结果都是2
console.log(divide(8,4));//2
function divide(a,b){
    return a/b;
}
console.log(divide(8,4));//2
/** */

/*P30-函数-默认值*/
/*有默认值的函数,不用指定参数

console.clear();

function greetings(name = '峰华'){
    console.log('你好,'+name)
}
greetings();//你好,峰华
/** */

/*如果一定要传入的话,那就覆盖默认的
greetings('HenryCome');//你好,HenryCome
/** */

/*undefined来补参数空位
//注意,这里不能使用null,因为null本身和123等是一样是值。
function greetings(nameOfMine = '峰华',weather){
    console.log('你好,'+nameOfMine+',今天天气:'+weather)
}
greetings(undefined,'晴天');//你好,峰华,今天天气:晴天
/** */

/*P31-函数-递归*/
//递归与循环类似,所以也需要一个条件来避免无限循环。
/*
1.老师说这个可以和循环转换
2.但是我没太明白这个这个:仿佛就是套娃,打开发现还有下一层,继续,然后到了最后再装起来。
3.if里面的return把值返到哪里呢?if只是导航,路还是一体的我分析属于sum()函数的下级,return就是跳出sum()
4.一个函数就是一首歌,你可以唱,我也可以唱。
*/
/*
console.clear;

function sum(n){
    if(n === 1){
        return 1;
    }
    return n + sum(n-1);
}
console.log(sum(100));//50
*/

//1 1 2 3 5 8……
//数列从0开始的,所以,0 1 2 3……
//那么函数的参数num<=1,是说前两位,位0,位1
//?问题那么多,以后再说,老师也说了这个等以后栈那里就好多了。
function fib(num){
    if (num <= 1){
        return 1;
    }
    return fib(num-1)+fib(num-2);
}
console.log(fib(4));


扫一扫 手机查看

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注