JavaScript函数
1: JavaScript函数简介
- 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
- 函数function:
A.函数也是一个对象
B.函数中可以封装一些功能(代码),在需要的使用可以执行这些功能(代码)
C.函数中可以保存一些代码在需要的时候调用
检查一个函数对象时 使用typeof,会返回function
实例:
2: JavaScript函数语法
函数就是包裹在花括号中的代码块,前面使用了关键词 function:
当调用该函数时,会执行函数内的代码。
可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。
提示:JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。
>:创建函数
- 使用函数声明创建一个函数
- 使用函数表达式创建一个函数/匿名函数
- 使用构造函数创建一个函数对象
- 每个函数都是Function 类型的实例,而 Function 也有属性和方法,跟其他引用类型一样。因为函数是对象,所以函数名就是 指向函数对象的指针,而且不一定与函数本身紧密绑定。函数通常以函数声明的方式定义,
语法:function 函数名([形参1,形参2,...,形参N]) { //语句 }
说明:[形参1,形参2,...,形参N]这里的 [] 表示可以使用参数也可以不使用参数
函数的调用:函数名([实参1,实参2,...]);
比如:
注意函数定义最后没有加分号
- 另一种定义函数的语法是函数表达式。函数表达式与函数声明几乎是等价的
这里,代码定义了一个变量 fun3并将其初始化为一个函数。注意 function 关键字后面没有名称, 因为不需要。这个函数可以通过变量 fun3 来引用。
注意这里的函数末尾是有分号的,与任何变量初始化语句一样
- 还有一种定义函数的方式与函数表达式很像,叫作“箭头函数”(arrow function),如下所示:
不能用作构造函数。
- 最后一种定义函数的方式是使用 Function 构造函数。这个构造函数接收任意多个字符串参数,最 后一个参数始终会被当成函数体,而之前的参数都是新函数的参数。调用函数:语法 函数对象();
来看下面的例子:
我们不推荐使用这种语法来定义函数,因为这段代码会被解释两次:第一次是将它当作常规 ECMAScript 代码,第二次是解释传给构造函数的字符串。这显然会影响性能。不过,把函数想象为对 象,把函数名想象为指针是很重要的。而上面这种语法很好地诠释了这些概念。
注意:函数声明与函数表达式区别:
- JavaScript 引擎在任何代码执行之前,会先读取函数声明,并在执行上下文中 生成函数定义,这个 过程叫作函数声明提升。而函数表达式必须等到代码执行到它那一行,才会在执行上下文中生成函数定义,如果把前面代码中的函数声明改为等价的函数表达式,那么执行的时候就会出错。
- 函数声明要求写出函数名称,而函数表达式并不需要。没 有名称的函数表达式也被称为匿名函数
>:调用带参数的函数
在调用函数时,可以向其传递值,这些值被称为参数。这些参数可以在函数中使用。
- 可以发送任意多的参数,由逗号 (,) 分隔:
- 声明函数时,请把参数作为变量来声明:
实例:
注意:
- 调用函数时解析器不会检查实参的类型,所以要注意,是否有可能会接收到非法的参数,如果有可能则需要对参数进行类型的检查
- 调用函数时,解析器也不会对检查实参的数量,多余的参数将不会被赋值,如果实参少于形参的数据,则没有对应实参的形参将是undefined
>:Javascript函数的返回值与立即执行函数
1: JavaScript函数的返回值
有时,我们会希望函数将值返回调用它的地方,可以在函数的()中来指定一个或多个形参(形式参数)
可以通过return 来返回函数的返回值
语法:return 值;
return 后面值将会作为函数的执行结果返回,
可以定义一个变量来接收函数的返回值在使用 return 语句时,函数会停止执行,并返回指定的值,如果return语句后不跟任何值,就相当于返回一个undefined。
语法:
实例:计算两个数字的乘积,并返回结果:
2:立即执行函数
函数定义完,立即被调用,这种函数叫做立即执行函数,立即执行函数往往只会执行一次
3:JavaScript函数的方法
call()与apply()
- 这两个方法都是函数对象的方法,需要通过函数对象来调用
- 当对函数调用call()和apply()都会去调用函数执行
- 在调用call()与apply()可以将一个对象指定为第一个参数 此时这个对象将会成为函数执行时的this
- call()方法可以将实参在对象之后依次传递
- apply() 方法需要将实参封装到一个数组中统一传递
附加:
this的总结:
1.以函数的形式调用时,this始终都是window对象
2.以方法的形式调用时,this就是调用方法的对象
3.以构造方法的形式调用时,this是新创建的那个对象
4.使用call与apply调用时,this是指定的那个对象