# 函数2 #
### 函数提升 ###
console.log(addnum);
function addnum(a,b){
return a+b;
}
函数和用var申明变量一样,也存在提升
只要不用var声明就不会产生全局变量
###1,函数申明
function addnum(a,b){
return a+b;
}
- 在使用函数申明的时候,注意两点,
>- 1,嵌套函数的申明,举例
function add(){
console.log(165);
function add2(){
console.log(111);
}
add2();
}add();
>- 2,函数和变量名相同时,会被覆盖
###2,函数表达式
简单来说,就是把函数赋值给一个变量,或者说是让变量储存这个函数;
###3,命名函数表达式
和上面的函数表达式基本一样,只是这个函数给了明确的名称;
###4,立即执行函数表达式
- 立即执行函数表达式;也称(iife)(Immediately-Invoked Function Expression);函数不用调用,就执行;
##3 参数
- 我们在最开始说函数就说了,参数,函数在进行计算时候,需要的条件值,就是参数。
- 参数分实参和形参。
- 实参就是实际传入的参数(调用),形参是申明函数时传入的参数,亦可作为函数的局部变量使用。
- 值传递
- 参数基本类型(number,boolean,string);
- 如果参数是复杂数据类型,那么会引起作用的反射;
###arguments对象
- arguments对象是和函数紧密结合在一起的,可以算是函数的一个属性argument,为当前执行的函数对象返回一个arguments对象;是一个伪数组。拥有一些数组的特性,比如有length属性,还可以通过下标去获取里面的参数值,也可以通过for来遍历,但它没有数组的方法。
aguments对象,是一个假的数组。它并不能使用数组的方法。如果我们需要使用这些方法,是不是还是
需要更多的代码来实现。而在我们es6中,提供了一个简单的获取全部参数方法,并且会把参数转化成真的数组。既然是真的数组,那么数组的方法,它都可以使用。
###不定参数 或者说剩余参数 自定义一个标识符,在前面加上三个点(...)
###作用域
作用域(scope)指的是变量存在的范围。
这个作用域的范围确定,主要是我们的函数
申明函数后,在函数内部,进行的变量申明和函数,在函数外面是找不到的,我们称之为局部变量;比如我们的小名,在家里人,都知道,但是在外面。是不是就不知道。与之相反,就是在函数外面进行申明,这个就是全局变量。不使用var申明,会产生全局变量