/*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));