JS笔记
函数语法
无参数无返回值的函数:
函数声明1:
function 函数名() {
函数体(具体要执行的代码);
}
调用1:
函数名();
function print(){
for(var i = 0;i < 10;i++){
document.write("hello world<br/>");
}
}
print();
有参数无返回值的函数
函数声明2:
function 函数名(形参1,形参2,…) {
函数体;
}
调用2:
函数名(实参1,实参2,…);//传参:用实参给形参赋值
function print(n){
for(var i = 0;i < n;i++){
document.write("hello world<br/>");
}
}
print(9);
有参数有返回值的函数
函数声明3:
function 函数名(形参1,形参2,…) {
函数体;
return 表达式;
}
【注】函数运行时,遇到return,整个函数会终止
function add(num1,num2){
return num1 + num2;
}
var res = add(6,9);
alert(res);//document.write(res);可以有多种不同的输出方式
函数作用
- 使程序变得简洁而清晰
- 有利于程序维护
- 可以提高程序开发效率
- 提高了代码的重用性/复用性
封装函数
【注】封装函数时,每一个函数内部都有一个arguments,是系统内置的。arguments用来存储实际传入的参数(优先使用形参,除非特殊情况)
属性:
arguments.length
输出当前里面存储的参数个数
arguments[下标];
访问某一个数据,下标从0开始
function sum(){
var res = 0;
for(var i = 0;i < arguments.length;i++){
res += arguments[i];
}
return res;
}
var num = sum(10,20,30,40,50);
alert(num);
函数作用域
任何程序在执行的时候都要占用内存空间,函数调用的时候也要占用内存空间
垃圾回收机制:调用函数的时候,系统会分配对应的空间给这个函数使用(空间大小一般由这个函数里声明的变量和形参决定);当函数使用完毕以后,这个内存空间要释放,还给系统
【注】在函数内部声明的变量和形参是属于当前函数的内存空间里的
var a = 2;
function show(){
a++;
alert(a);
}
show();//3
show();//4
show(a);//4
function show(){
var a = 2;
a++;
alert(a);
}
show();//3
show();//3
alert(a);//a is not defined
函数递归
满足以下三个特点:
- 函数自己调用自己
- 一般情况下有参数
- 一般情况下有return
构造方法:
- 首先找临界值,即无需计算就获得的值
- 找这一次和上一次的关系
- 假设当前函数已经可以使用,调用自身计算上一次
【注】不推荐,因为会一次开很大内存,然后用完再释放掉,计算机容易出故障
函数练习
//编写一个函数,计算两个数字的和、差、积、商
function operation(num1, operator, num2) {//operator根据运算符的符号,进行不同的运算
switch (operator) {
case "+":
return num1 + num2;
break;
case "-":
return num1 - num2;
break;
case "*":
return num1 * num2;
break;
case "/":
return num1 / num2;
break;
default:
alert("Error");
break;
}
}
var result = operation(3, "+", 5);
console.log(result);
//编写一个函数,当n为偶数时,求1/2+1/4+...+1/n,当n为奇数时,求1+1/3+1/5+...+1/n
function sum(n) {
var result = 0;
if (n % 2 == 0) {
for (var i = 2; i <= n; i += 2) {
result += 1 / i;
}
} else {
for (var i = 1; i <= n; i += 2) {
result += 1 / i;
}
}
return result;
}
var rst = sum(4);
console.log(rst);
//递归,计算1-n的和
function sum(n) {
if (n == 1) {
return 1;
}
return sum(n - 1) + n;
}
alert(sum(100));
//斐波那契数列
function rabbit(n) {
if (n < 4) {
return 1;
}
return rabbit(n - 1) + rabbit(n - 3);
}
alert(rabbit(9));
/*递归(猴子吃桃)
有一堆猴子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,第二天照此办法,吃掉了剩下桃子
的一半多一只,天天如此,到第num(num<=10)天早上,猴子发现只剩下一只桃子了,问这堆桃子原来有多
少只?
*/
function peach(n) {
if (n == 1) {
return 1;
}
return (peach(n - 1) + 1) * 2;
}
alert(peach(4));