- A+
1.普通函数
语法:
function 函数名(){
语句块
}
2.带参函数
语法:
function 函数名(参数列表){
语句块
}
3.带返回值的函数
语法:
function 函数名(参数列表){
语句块;
return 值;
}
允许通过一个变量来接受调用函数后的返回值
var 变量名 = 函数名(实参列表)
练习:
定义一个可以接受三个Number参数的方法,在该方法中,计算并返回最大的数值
<script type="text/javascript"> function getMax(a,b,c){ var max = a; b > max && (max = b); c > max && (max = c); return max; } </script> <button type="button" onclick="console.log(getMax(20,45,88))">最大值计算</button>
4.作用域
1.定义:变量和函数的可访问范围,主要有两类
(1)函数作用域
只在定义的函数内允许访问变量和函数
(2)全局作用域
一经定义,在任何位置处都能访问
2.函数作用域中的变量
在某个函数中声明的变量,就是函数作用域中的变量,也可以称为 “局部变量”
3.全局作用域中的变量
一经声明,任何位置都能使用,也称为 “全局变量”
声明方式:
(1)将变量声明在最外层,所有的function之外
(2)声明变量时不使用 var 关键字,一律是全局变量,但有风险 (当定义在函数中不使用var关键字声明全局变量时,只有此函数运行过一次后才声明成功)
4.声明提前
JS程序在正式执行前,会将所有var声明的变量以及function声明的函数,预读到所在作用域的顶端,但赋值还保留在原位置
function show(){ console.log(num); //打印undefined var num = 10; console.log(num); } function show(){ console.log(num); //报错 }
5.值传递
function change(a,b){ a ^= b; b ^= a; a ^= b; } function testchange(){ var a = 15; var b = 18; console.log("调用前:"); console.log(a,b); change(a,b); console.log("调用后:"); console.log(a,b); }
运行结果
change() 函数传过去的相当于副本,所以不会影响testchange() 函数中的内容
建议:基本数据类型的数据在做参数传递时,尽量不要在函数中修改,因为即使修改了,也不会影响原数据
5. 局部函数
将函数声明在某个函数内
6.全局函数
- paseInt()
- parseFloat()
- Number()
- isNaN()
- encodeURI() :对统一资源标识符格式的字符串进行编码,并返回编码后的字符串 将多字节的字符,编译成多个单字节的字符。
- decodeURI() :对已编码的URI进行解码
- encodeURIComponent() 在encodeURI基础上,允许特殊符号(:,/,)进行编码
- decodeURIComponent()
- eval() 计算并执行以字符串方式表示的JS代码
7.递归调用
1.递归指的是在一个函数中,有一次的调用了自己
2.递归的实现
(1)边界条件
(2)递归前进 - 继续调自己
(3)递归返回 - 向上返回数据
3.解决问题
计算某个数字的阶乘
//求n的阶乘
function f(n){
//判断是否到达边界条件,如果达到,则返回1
if(n == 1){
return 1;
}else{
return n * f(n-1)
}
}
//通过条件运算符改版
function f(n){
return n== 1 ? 1 : n * f(n-1);
}