一、函数
1、函数概述
实际上就是多行代码的抽取(多行代码会构成特定的功能)
2、、函数的优点
减少冗余代码(重复的代码放在函数里来封装起来)
提高了代码的可维护性以及可阅读性
3、函数分类
系统函数 window里面的所有函数都属于系统函数(console.log(),alert())
内置函数 所有的内置对象里面的函数都叫内置函数(Math.pow()...)
自定义函数 自己定义的函数
注:内置和系统函数更关注使用,而自定义函数关注定义以及使用
4、自定义函数的定义以及调用
1)、使用function关键词定义匿名函数(没有名字的函数)
例:
function(){
consolo.log(' ')
}
注:匿名函数直接调用,让其他事件去自动调用,声明比较少,没有复用价值
自执行函数:
(function(){
console.log(' ')
}()
注:自执行函数不能传参,函数调用后面带(),自执行的匿名函数,没有复用价值,只能用一次
2)、使用function关键词定义具名函数(有名字的函数)
第一种: function 函数名(形参1,形参2....){
函数体(代码块)
}
变种的具名函数:
第二种: var 函数名 = function(){
代码块
}
注:对于调用速度来说,第一种更快,因为function和var在预解析阶段就会声 明,而var关键词修饰的变量在预解析阶段是不会赋值的
3)、使用new Function声明(new后面的Function首字母一定要大写)
var 函数名 = new Function(' 形参1,形参2.... ' ' 函数内容题 ')
预解析:
预解析会做的事情:1、它会在声明对应function和var关键词修饰的变量开辟内存
2、对应的function的内存空间开辟以后它会将对应的代码块放在里面,等待调用
3、var修饰的关键词,只会开辟一个空间,并不会进行复制(默认undefined)
return关键词
return返回对应的数据,调用return后,后面的内容将不再执行,如果没有return,默认返回undefined
函数执行过程
1、方法栈:也称执行栈,是吧对应开辟的function内存里面的代码块丢给他去执行
2、执行栈会自动去执行对应的方法,执行完返回对应结果
作用域
当前一个变量的作用范围,分为局部,全局作用域
1.局部变量:位于某一个代码里面,称为局部变量,不能被全局访问(解决:变量提升为全局变量)
2、作用域链:先往同级的地方找,找不到向上面找,一直找到为止
注:如果外面没有声明变量,找不到变量就会报错
3、局部作用域:在一个函数内声明的或者在一段代码块内声明的,作用范围是当前的代码块
4、全局作用域:在对应的全局声明的,作用范围是全局