函数的定义
1.函数的声明
function 函数名(){
}
2.函数表达式
var aa=function(){
}
函数的调用
1.函数名()
函数分类:方式一:
有名函数
匿名函数(匿名函数无法直接调用,如果想要调用,需要使用匿名函数的自调用)
( function(){
alert();
})();
方式二:
内置函数:官方提供
自定义函数
函数的参数(形参 实参)
参数是一一对应的
实参>形参 --多余实参被省去
实参<形参 --多余形参为undefined
arguments
实参集合列表 类数组 有length长度 有下标 但是没有数组方法,适合形参个数不确定的情况
全局变量:在函数外部,script下 定义的变量
局部变量: 在函数中声明的变量,就是局部变量
不使用var声明的变量是全局变量,不推荐使用。
变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁
return
如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined
如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值
如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined
函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。
推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值。
函数的作用域与预解析
例如:谷歌浏览器 html css: 渲染引擎webkit
js解析器: v8引擎
js解析器内部 解读代码的时候分两步:1.查找声明的变量和函数
2.执行代码
预解析
js解析器执行js代码的时候,分为两个过程:
预解析过程和代码执行过程
预解析过程:
1. 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
2. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
3. 在提升的变量和函数中,如果名称有冲突,则函数覆盖变量,后者覆盖前者