函数的返回值
1、在函数内部有return关键字,并且在关键字后面有内容,这个内容被返回了
2、当函数调用之后,需要这个返回值,那么就定义变量接收这个返回值即可
3、函数没有返回值,但在调用的时候接收了,结果就是undefined
4、变量声明了,但没有赋值,结果也是undefined
5、如果一个函数中有return,那么这个函数就有返回值;如果一个函数中没有return,那么这个函数中就没有返回值
6、return下面的代码是不会执行的
function getSum(x, y){
return x + y; //把和返回
}
//调用函数
var result = getSum(10, 20);
console,log(result + 10);
//函数调用
function f1(){
console.log("库尼奇瓦");
return 100;
}
//f1函数调用,同时又把函数的返回值输出了
console.log(f1()); //"库尼奇瓦" "100"
console.log(f1); //输出的是f1函数名字----是f1函数的代码
//判断一个数是不是质数(素数)
function isPrimeNumber(num){
for(var i = 2; i < num; i++){
if(num % i == 0){
//说明有一个数字整除了,没必要向后继续整除,此时已经验证出不是质数.
//return后的代码不执行
return false;
}
}
return true;
}
console,log(isPrimeNumber(4) ? "是素数" : "不是素数");
//var temp = isPrimeNumber(4);
//if(temp){
// console.log("是素数");
//}else{
// console.log("不是素数");
//}
需要返回多个值的时候,可以返回数组
//求一个数组中最大值最小值还有和
/**
* @param {Object} array给我一个数组,返回一个数组(最大值,最小值,和)
*/
function getArrayMaxAndMinAndSum(array){
var max = array[0];//最大值
var min = array[0];//最小值
var sum = 0;//和
for(var i = 0; i < array.length; i++){
sum += 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]);
console.log("最大值:" + resultArray[0]);
console.log("最小值:" + resultArray[1]);
console.log("和:" + resultArray[2]);
函数里面可以调用函数
//输入年月日,获取这个日期是这一年的第多少天
//年---月---日:2019年3月10日
function getDays(year, month, day){
//定义变量储存对应的天数
var days = day;
//如果是1月份则,就没必要计算后面的天数,直接返回天数
if(month == 1){
return days;
}
//函数执行到这一步,说明用户输入的月份不是1月份
//定义一个数组,储存每个月的天数
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];
}
//判断用户输入的年份是不是闰年,如果是,并且月份 > 2,则+1
if(isLeapYear(year) && month > 2){
days++;
}
return days;
}
//函数判断输入的是否是闰年
function isLeapYear(year){
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
//验证
console.log(getDays(2000,2,1));
arguments对象,获取传入的每个参数的值
//定义
function f1(){
//获取的是函数调用时,传入了几个参数
//console.log(arguments.length);
//使用arguments对象可以获取传入的每个参数的值
console.log(arguments);
}
//调用
f1(10,20,30);
函数表达式
/**
* 函数定义:
* 1.函数声明----函数定义
* function 函数名(){
* 函数体
* }
*
* 函数的另一种表达方式:
* 函数表达式:
* 把一个函数给一个变量,此时形成了函数表达式
* var 变量=匿名函数;
* 例子:
* var f1 = function(){
*
* };
* 调用:
* f1();
*/
//函数声明
function f1(){
console.log("哈哈哈哈哈,真开心啊");
}
f1();//注意也是“又是开心的一天呀”,覆盖了“哈哈哈哈哈,真开心啊”
function f1(){
console.log("又是开心的一天呀");
}
f1();//又是开心的一天呀
//函数表达式
var f1 = function(){
console.log("哦吼吼吼");
}
f1();//哦吼吼吼
f1 = function(){//注意f1前面没有var!!,重新赋值
console.log("伊呀呀呀呀呀呀");
}
f1();//伊呀呀呀呀呀呀
//函数的自调用,没有名字,声明的同时调用
//一次性的,只能用一次
(function (){
console.log("我是函数的自调用啊");
})();//我是函数的自调用啊
(function(){
console.log("又是一个函数的自调用");
})();//又是一个函数的自调用
回调函数
//任何数据类型都可以作为函数的参数使用
//例如
function f1(x,y){
console.log(x + y);
}
f1(1,2);//数字类型作为参数使用
function f2(x,y){
console.log(x+y);
}
f2("哈哈哈","我真棒");//字符串类型作为参数使用
function f3(x){
console.log(x);
}
f3(true);//布尔类型作为参数使用
//如果一个函数作为参数,那么这个参数(函数)叫回调函数。
//只要一个函数作为参数使用了,那就是回调函数
function f4(fn){
console.log("你好啊");
fn();//函数调用--说明fn这个变量中存储的是函数的代码
}
function ff(){
console.log("撒朗嗨呦");
}
//调用函数f4
f4(ff);//括号里面写ff不带小括号,因为函数名()表示函数调用,输出的是函数ff的返回值
函数可以作为返回值使用
//函数是可以作为返回值使用的
function f1(){
console.log("f1函数调用了");
return function(){
console.log("哼哼");
}
}
var ff = f1();//调用,ff是函数f1 return后面的代码块
//ff就是一个函数了
ff();