六、函数重载
6.1 JavaScript支持重载吗?
重载在通常的面向对象语言中这样定义:
- 方法名相同
- 参数列表不同
满足这两个条件的函数就构成重载。
在JavaScript中,如果两个函数的名字相同,那么后定义的函数会覆盖先定义的函数。
所以,==JavaScript不能完成通常意义的重载!JavaScript不支持重载==
<script type="text/javascript">
// 定义一个add函数
function add (num1, num2) {
alert("两个参数的函数...");
return num1 + num2;
}
//函数名和上面定义的函数名相同,所以会覆盖上面的函数
function add (num1, num2, num3) {
alert("三个参数的函数");
return num1 + num2 + num3;
}
add(1, 2, 3); //调用3个参数的函数 返回6
add(1, 2); //调用3个参数的函数 返回undefined
</script>
6.2 模拟重载
虽然JavaScript不支持重载,但是我们可以通过一定的手动模拟出重载
<script type="text/javascript">
function add () {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
alert(add(2, 3));
alert(add(5, 6, 10));
</script>
七、函数的递归调用
递归调用是指的,在函数的内部调用当前函数。即自己调用自己。
使用递归一定要满足下面条件,否则很容易出现死循环。
- 一定要有结束条件。
- 随着递归的深入,应该逐步靠近结束条件。(结束条件也好收敛)
递归案例:计算一个数的阶乘
<script type="text/javascript">
function jieCheng (num) {
if(num == 1){
return 1;
}
//递归调用
return jieCheng(num - 1) * num;
}
alert(jieCheng(6));
</script>
注:在不满足if判断时,每次的返回值结果是除了自调函数之外的部分
八、几个常用的内置函数
finite有限的
encodeURI采用utf-8编码格式将内容转换为%xx格式字符串
encodeURIComponent同样采用utf-8编码格式将内容转换为%xx格式字符串,与encodeURI不同的是会对更多的符号内容做编码处理