• 函数由数学中定义中引申来。
• 函数就是,一个功能对应的所有语句的集合。
• 函数关键字:function
• 函数不能定义在循环、分支等语句中。
• 语法:
function 函数名(参数1,参数2....) {
函数体;
// JavaScript语句
}
函数名();//调用函数执行。
// 标识符:变量名、函数名、属性名、类名、参数名。
// 必须以字母、下划线、或者$开头,后面可以跟着数字、字母、下划线
代码:
// 第一: 基础函数定义
// 函数定义可以放在函数调用之前和之后都可以。
// 函数的关键字:function
function add() {
// 函数体
console.log('my first function!');
}
// 函数的调用语句。
add();
// 第二:带参数的函数
// 定义一个函数,实现求两个数的乘积
function mult(a, b) { // a \ b 形参。
// a * b;
console.log(a * b);
return a * b;// 把 a 和 b 的相乘=结果返回到函数调用者的地方。
}
// 函数返回的结果: 直接赋值给了变量 t
// 2 \4 是实际传递的参数,实参。
var t = mult(2, 4); // 执行 mult 函数。给函数体传递 2 和 4 两个参数。
console.log('t = ' + t);
1.函数的封装
•计算1到n的和,可能用到很多次,每写一次都要重复吗?
function sumNum(n) {
var i = 1, result = 0;
if( n && n >= 1){
while( i <= n) {
result += i;
}
}
return result;//返回结果
}//能改进一下吗?
函数调用:
sumNum(20);//自动返回result,以后直接拿来用就可以了。
2.return子句
• return标识函数的结束。
• 当程序遇到return时,函数立即结束并返回相应的值。否则函数执行到}结束。
• 如果函数没有任何的返回值,JavaScript会默认返回undefined
3.函数的参数
形参和实参匹配传递
形参就是:函数定义的参数。
实参:就是函数执行传递的参数。
形参和实参个数不匹配的时候
优先从左向右进行匹配
实参个数可以少于形参,也可以多于形参
所有的参数都会放到 arguments
4.函数练习
1.给一个数字,返回相应的星期。
2:星期二 ‘sss'=> 不是星期的格式 getWeekName(3);
2.用函数实现给一个整数n,返回从1到n的和。
3.给定一个整数n(n>=3),实现求斐波那契数列f(n) . 4.给定一个整数n(n>=2),求n的阶乘
5.匿名函数
匿名函数就是没有函数名的函数。一般会把匿名函数赋值一个变量进行使用,或者匿名函数
声明完了后立即调用自己。
匿名函数可以作为一个变量来使用。
匿名还是可以作为一个参数进行传递。
// 匿名函数
var f = function(a) {
return a *a;
};
// 因为我们用 var 声明的一个变量 f,f 的类型是 function
// f 变量跟其他变量一样使用,可以作为其他函数的参数使用。
console.log(typeof f); // => function
console.log(f(3));
console.log(typeof f2);
console.log(f2(9));
// 函数的声明
function f2(a) {
return a * a;
}
// 区别: 变量声明的函数(匿名函数)不能进行函数提升。
6.函数练习
// 实现 1 到 n 的和。
function sum(n) {
// 实现 1 到 n 的计算
// -9, 0 ==0 'ssss' "0" == 0 null !=0 undefined != 0 false ..
// 如果用户传来的数据不是数字类型:返回 NaN
// 如果用户传来的数据不是大于 1 的数字:返回 0;
if( typeof(n) != 'number') {
return NaN; // 直接返回 NaN。如果函数中执行遇到了 return语句,函数立即结束。
}
if( n < 1 ) {
// return; // 直接写 return 和没有返回值的函数,都会返回一
个默认的 undefined
return 0;
}
// 大于 1 的情况下
var i = 1, result = 0;
while( i <= n ) {
result += i;
i++;
}
return result;// 把计算的和返回。
}
var t = sum(7); // => 1+ 2+ 3+..7
console.log(t);