让学习“上瘾”,成为更好的自己!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>functionUsing</title>
</head>
<script>
/*
1, ECMAScript中的函数在定义时不必指定是否返回值
2,任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值
3,return语句可以不带任何返回值,此时,函数在停止执行后会返回undefined值
【注意】 要么让函数始终都返回一个值,要么都不要返回值
4,理解参数
a, 定义函数只接收两个参数,传递参数时可以多于2或者少于2个
why? --> ECMAScript 中的参数在内部是用一个数组表示的,函数接收的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)
b, “函数体内可以通过“arguments对象”(与数组类似)来访问这个参数数组,从而获取传递给函数的每一个参数
通过访问arguments对象的length属性 --> 可以获取有多少个参数传递给了函数
arguments对象可以与命名的参数一起使用,arguments对象对应元素的值与命名参数的值保持同步
c, 没有重载
ECMAScript函数没有签名(Java),因为其参数是由零或多个值的数组来表示的
没有函数签名,重载不可能做到
但可以有类似以下的写法模仿方法的重载:
function doAdd(){
if(arguments.length == 1){
alert(arguments[0] + 10);
}else if(arguments.length.length == 2){
alert(arguments[0] + arguments[1]);
}
}
*/
// function sayHi(name, message){
// alert('hello, '+name+', '+message);
// }
// ===============等价书写=================
function sayHi(){
alert('hello, '+arguments[0]+', '+arguments[1]); // 表明ECMAScript函数的一个特点:命名的参数只提供便利,但不是必需
}
sayHi('kai','you are right about that!','abab','cdcd'); // 参数的理解
// function addNum(num1, num2){
// return num1 + num2;
// }
// alert(addNum(12,23));
// function noReturn(){
// return;
// }
// alert(noReturn()); // undefined
function showHowManyArgs(){
alert(arguments.length);
}
showHowManyArgs(12,'ere',23);
showHowManyArgs(12,'ere',23,'0');
showHowManyArgs(12,'ere');
function doAdd(num1, num2, num3){
arguments[1] = 10; // 每次调用都会重写第二个参数
alert(arguments[0] + num2);
// arguments对象可以与命名的参数一起使用,arguments对象对应元素的值与命名参数的值保持同步
// 单向影响: 修改命名参数不会改变arguments中对应的值
// arguments对象的长度是由传入的参数个数决定的,不是由定义函数时命名参数的个数决定的
// 没有传递值的命名参数被自动赋予undefined值!!! 见doAdd(12)结果
// ECMAScript中的所有参数的传递都是值传递,不可能通过引用(地址)传递参数
}
// doAdd(12, 43); // 22
// doAdd(12); // NaN --> 传入一个参数,为argument[1]设置的值不会反映到命名参数中
// 类似方法重载的写法
function doAdd(){
console.log(arguments);
if(arguments.length == 1){
alert(arguments[0] + 10);
}else if(arguments.length == 2){
alert(arguments[0] + arguments[1]);
}
}
doAdd(12); // 12 + 10
doAdd(1,23); // 1 + 23
</script>
<body>
</body>
</html>