1.定义函数----面试时说三种即可,说明常用的
1.1使用构造函数创建函数对象---创建出来的是对象---不经常使用
1.2声明函数---常用
1.3函数表达式---本质是赋值一个匿名函数
2.函数参数----形参就相当于在函数作用域声明了变量
注意事项
1.调用函数时解析器不会检查实参的类型,所以要注意可能会接收到非法的参数,如果有可能则需要对参数进行类型的检查
2.调用时多余的实参不会被赋值,如果实参的数量少于形参的数量,则没有对应实参的形参将会是undefined,输出的结果会是NAN
3.函数返回值---使用return对结果进行返回,return以后的代码不执行,可以返回对象,也可以是函数(可以返回任意类型的)
注意只有一个return,后面不接值的话则相当于return undefined;continue是跳出当次循环,break退出当前循环(比如for循环),return结束整个函数
4.作用域---js有两种作用域:全局作用域和函数作用域(局部作用域)
4.1全局作用域---变量起作用的区域---不使用var声明的都会变为全局变量
全局作用域中创建的变量会作为window对象的属性保存,创建的函数会作为window对象的方法保存
4.2函数作用域---作用域链
注意取到全局变量可以通过window.b取到,不使用var声明的都会变为全局变量
注意在函数作用域也有声明提前的特性,使用var关键字声明的变量,会在函数中所有的代码执行之前被声明(先输出会返回undefined);函数声明也会在函数中所有的代码都执行之前执行。
4.3变量提升---注意函数的变量提升---只有声明方式创建的函数有函数提升
5.闭包
6.构造函数(首字母大写、调用通过new关键字调用)
6.1构造函数介绍及创建实例----每调用一次函数就会创建一个新的函数作用域,他们之间相互独立
创建一个构造函数实例
6.2instanceof使用
instanceof---判断复杂类型的对象:判断是不是某个类的实例
如果判断基础数据类型则是false
构造函数与普通函数的区别
6.3构造函数修改
7.this
8.Arguments对象---arguments 是一个对应于传递给函数的参数的类数组对象---不定义形参,也可以去使用实参---callee属性指向参数所属的当前执行的函数
不定义形参,也可以去使用实参
使用
9.立即执行函数
可以进行传参