当我们不确定有多少个参数传递时,可以用arguments来获取,在JS中,arguments实际上是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参
<script>
//arguments的使用
function fn() {
console.log(arguments);
}
fn(1, 2, 3);
</script>

1.具有数组的length属性,arguments.length可以获取到arguments的长度(也就是形参的个数)
2.按照 键 / 值 对的方式进行存储
3.他没有数组的一些方法如:pop();push();等
<script>
//案例:利用函数求任意个数的形参的最大值
function getMax() {
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
var re = getMax(1, 2, 3, 4, 5);
alert(re);
</script>

function reverse(arr) {
var newArr = [];
for (i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i];
}
return newArr;
}
var arr1 = reverse([1, 2, 3]);
console.log(arr1);

<script>
//用函数对数组进行冒泡排序
function sort(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
var arr1 = sort([1, 4, 2, 9]);
console.log(arr1);
</script>

输入一个闰年,判断是闰年还是平年(闰年:能被4整除且不能被100整除,或者能被400整除)
<script>
//输入一个闰年,判断是闰年还是平年(闰年:能被4整除且不能被100整除,或者能被400整除)
function isRunYear(year) {
//如果是闰年返回true,否则返回false
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
console.log(isRunYear(2000));
</script>

执行顺序:
1.先执行到fn1函数,因为没有调用,所以继续往下执行
2.执行到fn2,还是没有调用,继续往下执行
3.再往下执行到调用fn1,就回到fn1函数体,执行函数
4.执行的结果是11,然后继续执行到下一步调用了fn2
5.返回fn2,执行fn2的函数体
6.fn2的函数体执行输出22和字符串fn2
7.fn2执行完毕后,回道fn1继续执行接下来的代码
8.执行fn1的最后一行代码,输出fn1字符串
//函数可以互相调用
function fn1() {
console.log(11);
fn2();
console.log('fn1');
}
function fn2() {
console.log(22);
console.log('fn2');
}
fn1();

分析:闰年是29天,平年是28天
就是在上面判断闰年的例子上变一下就行
<script>
//判断是否为闰年
function isRunYear(year) {
//如果是闰年返回true,否则返回false
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
//用户输入年份,输出当年2月份的天数
//就是调用一下上面判断闰年函数而已
function backDay() {
var year = prompt('请你输入年份:');
//判断是否为闰年,就直接调用上面的判断是否闰年的函数
//if 的这个year不是上面那个函数的形参,而是本函数的用户输入数字,然后这个数字变成上面闰年函数的形参
if (isRunYear(year)) {
alert(year + '年是闰年2月份有29天');
} else {
alert(year + '年份是平年2月份有28天');
}
}
backDay();
</script>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function fun(){
alert("函数要执行了~~~~");
for(var i=0 ; i<5 ; i++){
if(i == 2){
//使用break可以退出当前的循环,只是退出循环,其他的代码还是会执行,比如下面的alert());
//break;
//continue用于跳过当次循环
//continue;
//使用return可以结束整个函数,return后面的代码完全不执行,不只是循环,就连后面的alert();都不执行
//return;
}
console.log(i);
}
alert("函数执行完了~~~~");
}
//fun();
//-----------------------------------------------------
/*
* 返回值可以是任意的数据类型
* 也可以是一个对象,也可以是一个函数
*/
//返回一个对象
function fun2(){
return {name:"沙和尚"};
}
var a = fun2();
console.log("a = "+a);
//-----------------------------------------------------------------
//返回一个函数
//可以在函数内部再声明函数,写多少层都可以
function fun3(){
//在函数内部再声明一个函数
function fun4(){
alert("我是fun4");
}
//将fun4函数对象作为返回值返回
return fun4;
}
//fun3();这里调fun3();就等于调fun4();结果就是 我是fun4
a = fun3();
//a();这也是调用fun3();,结果是 我是fun4
//console.log(a);
fun3()();//相当于获取返回值然后再执行,结果也是 我是fun4,前面的fun3()相当于接收到fun4()的值,后一个括号相当于再执行一次这个值
</script>
</head>
<body>
</body>
</html>
网友评论