JavaScript—函数
函数的概念
在js里面,可能会定义非常多的相同代码或功能相似的代码,这些代码需要大量重复地使用。
函数就是封装了一段可被重复调用的代码块。通过代码块实现大量代码的重复使用。
函数示例
//常规方法
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum); //输出1~100的和
var sum1 = 0
for (var i = 1; i <= 10; i++) {
sum1 += i;
}
console.log(sum1); //输出1~10的和
var sum2 = 0;
for (var i = 1; i <= 5; i++) {
sum2 += i;
}
console.log(sum2); //输出1~5的和
//函数法
function getSum(begin, end) {
var fSum = 0;
for (var i = begin; i <= end; i++) {
fSum += i;
}
console.log(fSum);
}
getSum(1, 100); //输出1~100的和
getSum(1, 10); //输出1~10的和
getSum(1, 5); //输出1~5的和
函数的使用
函数的使用步骤是声明函数和调用函数
- function声明函数的关键字
- 函数是做某件事,函数名一般用动词
- 函数不调用自己不执行
- 调用时需要带上小括号
函数的封装就是把一个或多个功能通过函数的方式封装起来,对外只留有一个简单的函数接口。(类似打包)
参数 | 说明 |
实参 | 形式上的参数函数定义时,传递的参数 |
形参 |
带参数的函数
function getSum(begin, end) { // begin与end为形参
var fSum = 0;
for (var i = begin; i <= end; i++) {
fSum += i;
}
console.log(fSum);
}
getSum(1, 100); //把1(实参)赋值给begin(形参),把100(实参)赋给end(形参)。输出1~100的和
getSum(1, 10); //输出1~10的和
getSum(1, 5); //输出1~5的和
函数的参数
- 函数可以带参数也可不带。
- 声明函数时,函数名括号内为形参,默认值为undefined。
- 调用函数时,函数括号内是实参。
- 形参与实参个数不匹配结果不确定,尽量匹配。
函数形参与实参个数对应情况
function getSum(num1, num2) {
console.log(num1 + num2);
}
getSum(1, 0); // 形参与实参个数相同正常输出
getSum(1, 0, 2); //如果实参个数多于形参,只取到形参个数(多出部分忽略)
getSum(1); // 实参个数小于形参,num2是一个变量但是没有接受值所以结果为undefined(未定义)所以输出NaN
函数的返回值
有时需要获取函数的返回值,可以通过return实现。
函数的返回值
function getResult() {
return 10;
}
console.log(getResult());
返回两个数中小的值
function getMin(num1, num2) {
return num1 < num2 ? num1 : num2;
}
console.log(getMin(1, 0));
函数返回数组中的最大值
function getArr_Max(arr) {
var max = arr[0];
for (var i = 1; i <= arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
var _Max = getArr_Max([1, 7, 4, 5, 1, 6, 7, 3]);
console.log(_Max);
return终止函数
function getResult() {
return 10;
console.log('不被执行的内容'); // return返回后函数终止后面的语句不再执行
}
console.log(getResult());
return值的个数
function getResult() {
return 10, 0, 1; // 返回最后一个值
}
console.log(getResult());
function getResult() {
return [0, 1, 2, 3, 4, 5, 6] // 返回一个数组(数组内可以有多个值)
}
console.log(getResult());
函数无返回值
function getResult() {
}
console.log(getResult()); // undefined
arguments的使用
当我们不确定有多少个参数传递的时候,以用arguments来获取。在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,argumennts对象中存储了传递的所有实参。只有函数才有argumennts对象,每个函数都内置有argumennts。
argumennts展示形式是一种伪数组,因此可遍历。伪数组具有以下特点:
- 具有length属性
- 按索引方式储存数据
- 不具有数组的push(),pop()等方法
arguments的使用
function getResult() {
console.log(arguments); //里面存储了所有传来的实参
}
getResult(1, 2, 3, 4, 5, 6, 7);
arguments取任意个数中的最大值
unction getResult() {
var Max = arguments[0];
for (var i = 0; i <= arguments.length; i++) {
if (arguments[i] > Max) {
Max = arguments[i];
}
}
return Max;
}
console.log(getResult(1, 2, 3, 4, 5, 6, 7));
函数案例
利用函数翻转数组
function reverse(arr) {
var arr0 = [];
for (var i = arr.length - 1; i >= 0; i--) {
arr0[arr0.length] = arr[i];
}
return arr0;
}
var arr = reverse([1, 7, 4, 5, 1, 6, 7, 3]);
console.log(arr);
冒泡排序
function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
var arr = bubbleSort([1, 7, 4, 5, 1, 6, 7, 3]);
console.log(arr);
判断闰年
function isLeapYear(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
console.log(isLeapYear(2020));
函数互相调用
function f1() {
console.log(0);
f2();
}
function f2() {
console.log(1);
}
f1();
判断年份2月天数
function backDay() {
var year = prompt("请输入需要判断的年份:");
if (isLeapYear(year)) {
alert("该年份2月有29天");
} else {
alert("该年份2月有28天");
}
}
function isLeapYear(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
backDay();
函数的两种声明方式
函数关键字自定义函数
function fn() {
console.log('利用关键字自定义函数(命名函数)');
}
fn();
函数表达式
var fun = function () {
console.log('函数表达式(匿名函数)');
}
fun();