javascript函数
文章目录
1.什么是函数
将需要反复使用的功能代码,封装成独立的模块,这个模块就是函数.
2.使用函数的好处?
- 可复用(可重复使用)
- 功能代码可控
3.函数的分类
- 内置函数 (js给我们提供的)
- 自定义函数 (自己定义)
4.函数的类型
Function
5.如何声明函数
5-1.语句定义法(在任意位置都可以调用)
// 函数的基本语法
function 函数名() {
函数体
}
// 函数的调用
函数名()
//举例说明
function sayHi() {
document.write('你好!')
}
//函数的调用
sayHi()
5-2.表达式定义法(只能先声明后调用)
var 函数名 = function([参数]){
//功能代码
}
6.如何调用函数
- 一般调用: 函数名([参数])
- 事件调用 触发事件后调用函数
7.函数的参数
形式参数(形参):定义函数时所传递的参数
实际参数(实参): 调用函数时所传递的参数
注意:
-
参数传递: 只能将实参 传递给形参,即单向传递
-
形参只能是变量; 实参可以是变量,常量,表达式
-
实参的数量 小于形参的数量时,多余的形参值为undefined
-
实参的数量 大于形参的数量时,自动忽略多余的实参
8.函数的返回值 return
有返回值函数的概念:
1 . 当调用某个函数,这个函数会返回一个结果出来
2 . 这就是有返回值的函数
返回值得作用
- 将函数内部处理后的结果返回到调用该函数的地方
- 退出函数
**注意:**函数中不写return,函数得返回值就是undefind
arguments
function fn() {
// arguments 接收调用函数时的所有实参
console.log(arguments)
}
fn(12, 34, 5, 6, 78, 84, 4, 3, 2, 2, 12, 5)
9.函数作用域
作用的范围
全局作用域:在函数外定义的变量,在页面的任何一个地方都可以使用
局部作用域: 在函数内定义的变量,只能在函数内使用
**注意:**在函数中声明变量不加var 就是全局变量;形参 是局部作用域
作用域链:如果当前作用域没有,则向父级作用域查找,如果还没有,继续向父级作用域,一直找到全局作用域,如果还没有,报错
一旦进入作用域,就启动js解析器
1:在作用域中寻找一些东西 var function 形参
//找到var后,将var后的变量名提取出来,并给他初始化一个值undefined
//变量和函数同名,丢变量,保函数
//当有多个scripte标签时,从上到下依次解析并执行第一个script标签,然后下一个,依次类推
//在上面script标签中声明的东西,下面script标签中都可以使用
//下面script标签中声明的东西,上面使用会报错
2:逐行解读代码
1:执行表达式
2:函数调用
一,预解析 var function 形参
二,逐行解读代码
1:执行表达式
2:函数调用
10.匿名函数
-
将匿名函数赋值给一个变量
var fn = function () { alert('hello') } fn()
-
将匿名函数绑定给一个事件
document.onclick = function () { alert(0) }
-
匿名函数自我执行
(function () { alert(123) })()
-
匿名函数的返回值(将一个匿名函数的返回值赋值给一个变量)
var num = (function () { return 3 })() alert(num)
-
输出一个匿名函数的返回值
alert( (function () { return 'hello' })() )
-
给匿名函数传递参数
var sum = (function (a, b) { return a + b })(3, 4) alert(sum)
11.递归
递归:函数自己调用自己,跟循环类似,他为了避免无限的递归,需要设置一个递归终止点
// 本质 :实现了循环
// 1~n之间所有数的和
function fnSum(n) {
// 结束条件
if (n === 1) {
return 1
}
return n + fnSum(n - 1)
}
console.log(fnSum(100))
计算斐波那契数列的第N项
斐波那契数列(Fibonacci sequence),又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上, 斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3)。
function fibonacci(n){
if(n==1){
return 1;
}
if(n==2){
return 1;
}
//n = 3 :return fibonacci(2)+fibonacci(1)
//n = 4 :return fibonacci(3)+fibonacci(2)
return fibonacci(n-1)+fibonacci(n-2);
}
fibonacci(10)
递归函数的优缺点
优点:结构清晰, 可读性强, 而且容易用数学归纳法来证明算法的正确性, 因此它为设计算法、 调试程序带来很大方便。
缺点:递归算法的运行效率较低, 无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。