函数的定义
-
声明式
// 使用function这个关键字来声明一个函数 // 语法 function fn(){ console.log("一段代码") }
-
赋值式(匿名函数)
// 其实就是我们用var关键字来定义一个变量 // 然后把一个函数当作值直接赋值给这个变量就可以 // 语法: var fun = function(){ console.log("一些代码") }
函数的调用
-
语法: 函数名()
-
注意点
1. 声明式函数:调用可以在定义之前或定义之后 2. 赋值式函数:调用只能在定义之后 3. 定义完一个函数以后,如果没有函数调用,那么写在{}里面的代码没有意义,只有调用以后{}里面的代码才会执行
函数的参数
-
形参和实参
- 概念
参数 说明 形参 形式上的参数 函数定义的时候 传递的参数 当前并不知道是什么 实参 实际上的参数 函数调用的时候 传递的参数 实参是传递给形参的 -
注意点
参数个数 说明 实参个数等于形参个数 输出正确结果 实参个数多于形参个数 只取到形参的个数 实参个数小于形参个数 多的形参定义为undefined,结果为NaN -
在JavaScript中,形参的默认值是undefined
函数的优点
- 函数的优点
== 函数的几个优点
== 代码封装,使代码更加简洁
== 复用,在重复功能的时候直接调用就好
== 代码执行时机,随时可以在我们想要执行的是时候调用
函数的作用域
全局作用域,局部(函数)作用域,JS 没有块级作用域(es6以前)
变量的作用域
-
全局变量
- 全局变量在代码的任何位置都可以使用
- 在全局作用域下 var 声明的变量 是全局变量
- 特殊情况下,在函数内不使用 var 声明的变量也是全局变量(不建议使用)
-
局部变量
- 局部变量只能在该函数内部使用
- 在函数内部 var 声明的变量是局部变量
- 函数的形参实际上就是局部变量
-
注意点
- 全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存
- 局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被销毁,因此更节省内存空间
预解析
-
概念
JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析和代码执行。
- 预解析:js引擎会把js里面所有的 var 还有 function 提升到当前作用域的最前面
- 代码执行:从上到下执行JS语句
-
变量预解析(变量提升)
-
变量预解析也叫做变量提升、函数提升
-
变量提升
变量提升: 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升 console.log(num); // 结果是多少? var num = 10; // undefined //相当于执行了以下代码 var num; // 变量声明提升到当前作用域最上面 console.log(num); num = 10; // 变量的赋值不会提升
-
函数提升
函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。 fn(); //11 function fn() { console.log('11'); }
-
-
函数递归
== 在编程中,递归就是一个自己调用自己的手段
== 一个函数内部,调用了自己,就是递归函数
求斐波那契数列的第n项
function feibo(n){
if(n==1){
return 1;
}else if(n==2){
return 1;
}else{
return feibo(n-1)+feibo(n-2)
}
}
console.log(feibo(6))